From 3ff08130976ae41646b76bf85c2fc8f9989795f3 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Fri, 18 Sep 2020 11:10:53 -0400 Subject: [PATCH 01/20] change default ssh port for bpatch and bpatchfull --- bin/bpatch | 10 +++++++--- bin/bpatchfull | 18 +++++++++++++----- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/bin/bpatch b/bin/bpatch index 78c39af4..d7f4ba1a 100755 --- a/bin/bpatch +++ b/bin/bpatch @@ -17,6 +17,10 @@ # # You install the JDK on the remote node first: apt install openjdk-11-jdk-headless # +# Environment variables: +# +# BUBBLE_SSH_PORT : SSH port, default is 1202 +# SCRIPT="${0}" SCRIPT_DIR=$(cd $(dirname ${SCRIPT}) && pwd) . ${SCRIPT_DIR}/bubble_common @@ -34,8 +38,8 @@ mvn -DskipTests=true -Dcheckstyle.skip=true compile && rsync -avzc ./target/clas if [[ ! -z "${NO_RESTART}" && "${NO_RESTART}" == "norestart" ]] ; then echo "Patching but not restarting..." - ssh ${HOST} "cd /tmp && cp ~bubble/api/bubble.jar . && cd classes && jar uvf ../bubble.jar . | egrep -v '*/\(*' && cat ../bubble.jar > ~bubble/api/bubble.jar" || die "Error patching remote jar" + ssh -p ${BUBBLE_SSH_PORT} ${HOST} "cd /tmp && cp ~bubble/api/bubble.jar . && cd classes && jar uvf ../bubble.jar . | egrep -v '*/\(*' && cat ../bubble.jar > ~bubble/api/bubble.jar" || die "Error patching remote jar" else echo "Patching and restarting..." - ssh ${HOST} "cd /tmp && cp ~bubble/api/bubble.jar . && cd classes && jar uvf ../bubble.jar . | egrep -v '*/\(*' && cat ../bubble.jar > ~bubble/api/bubble.jar && supervisorctl restart bubble" || die "Error patching remote jar" -fi \ No newline at end of file + ssh -p ${BUBBLE_SSH_PORT} ${HOST} "cd /tmp && cp ~bubble/api/bubble.jar . && cd classes && jar uvf ../bubble.jar . | egrep -v '*/\(*' && cat ../bubble.jar > ~bubble/api/bubble.jar && supervisorctl restart bubble" || die "Error patching remote jar" +fi diff --git a/bin/bpatchfull b/bin/bpatchfull index 157f5add..5a8be782 100755 --- a/bin/bpatchfull +++ b/bin/bpatchfull @@ -14,6 +14,10 @@ # Patch the bubble.jar on a remote node. # This script updates the entire jar file, and takes a lot longer than bpatch # +# Environment variables +# +# BUBBLE_SSH_PORT : SSH port, default is 1202 +# SCRIPT="${0}" SCRIPT_DIR=$(cd $(dirname ${SCRIPT}) && pwd) . ${SCRIPT_DIR}/bubble_common @@ -21,6 +25,10 @@ SCRIPT_DIR=$(cd $(dirname ${SCRIPT}) && pwd) HOST=${1:?no host provided} NO_RESTART=${2} +if [[ -z "${BUBBLE_SSH_PORT}" ]] ; then + BUBBLE_SSH_PORT="1202" +fi + BUBBLE_SERVER_DIR="${SCRIPT_DIR}/../bubble-server" if [[ ! -d "${BUBBLE_SERVER_DIR}" ]] ; then die "bubble-server dir not found: ${BUBBLE_SERVER_DIR}" @@ -35,7 +43,7 @@ else fi if [[ ${ANY_CHANGES} -eq 0 ]] ; then echo "No changes, not repackaging jar" - scp ./target/bubble*.jar ${HOST}:/tmp/bubble.jar || die "Error copying file to remote host ${HOST}" + scp -P ${BUBBLE_SSH_PORT} ./target/bubble*.jar ${HOST}:/tmp/bubble.jar || die "Error copying file to remote host ${HOST}" else if [[ ${ANY_JAR} -eq 0 ]] ; then echo "No bubble jar file found, rebuilding" @@ -44,18 +52,18 @@ else find "./src/main" -type f -newer "$(find "./target" -type f -name "bubble*.jar" | head -1)" fi BUBBLE_PRODUCTION=1 mvn -DskipTests=true -Dcheckstyle.skip=true clean package || die "Error packaging jar" - scp ./target/bubble*.jar ${HOST}:/tmp/bubble.jar || die "Error copying file to remote host ${HOST}" + scp -P ${BUBBLE_SSH_PORT} ./target/bubble*.jar ${HOST}:/tmp/bubble.jar || die "Error copying file to remote host ${HOST}" fi if [[ ! -z "${NO_RESTART}" && "${NO_RESTART}" == "norestart" ]] ; then echo "Patching but not restarting..." - ssh ${HOST} "cat /tmp/bubble.jar > ~bubble/api/bubble.jar" + ssh -p ${BUBBLE_SSH_PORT} ${HOST} "cat /tmp/bubble.jar > ~bubble/api/bubble.jar" else echo "Patching and restarting..." - ssh ${HOST} "cat /tmp/bubble.jar > ~bubble/api/bubble.jar && supervisorctl restart bubble" + ssh -p ${BUBBLE_SSH_PORT} ${HOST} "cat /tmp/bubble.jar > ~bubble/api/bubble.jar && supervisorctl restart bubble" fi if unzip -Z -1 ./target/bubble*.jar | grep -q "^site/$" ; then echo "Deploying new web..." - ssh ${HOST} "cd ~bubble && unzip -o /tmp/bubble.jar 'site/*' && chown -R bubble:bubble site" + ssh -p ${BUBBLE_SSH_PORT} ${HOST} "cd ~bubble && unzip -o /tmp/bubble.jar 'site/*' && chown -R bubble:bubble site" fi From 5cad7f73a46030542b676a56c0b12c5b30dffa4f Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Fri, 18 Sep 2020 11:13:28 -0400 Subject: [PATCH 02/20] allow forking a node directly from a local launcher --- .../compute/ComputeServiceDriverBase.java | 4 +- .../GeoLocateServiceDriverBase.java | 12 +- .../java/bubble/dao/account/AccountDAO.java | 5 +- .../bubble/dao/account/AccountSshKeyDAO.java | 5 +- .../bubble/dao/cloud/BubbleNetworkDAO.java | 2 +- .../bubble/main/rekey/RekeyReaderMain.java | 2 +- .../java/bubble/model/bill/AccountPlan.java | 7 +- .../bubble/model/cloud/BubbleNetwork.java | 12 +- .../java/bubble/model/cloud/BubbleNode.java | 2 + .../java/bubble/model/cloud/LaunchType.java | 17 + .../bubble/notify/NewNodeNotification.java | 3 + .../NotificationHandler_sync_account.java | 5 +- .../resources/account/AuthResource.java | 5 +- .../bubble/server/BubbleConfiguration.java | 7 +- .../listener/NodeInitializerListener.java | 5 +- .../service/account/MitmControlService.java | 3 +- .../service/boot/StandardSelfNodeService.java | 13 +- .../service/cloud/AnsiblePrepService.java | 4 +- .../service/cloud/NodeLaunchMonitor.java | 3 +- .../service/cloud/StandardNetworkService.java | 7 +- .../dbfilter/DatabaseFilterService.java | 6 +- .../service/dbfilter/FullEntityIterator.java | 17 + .../stream/StandardAppPrimerService.java | 3 +- .../META-INF/bubble/bubble.properties | 2 +- bubble-server/src/main/resources/apps.json | 1486 ----------------- .../V2020091801__add_network_launch_type.sql | 1 + bubble-server/src/main/resources/messages | 2 +- .../roles/mitmproxy/files/bubble_api.py | 5 +- bubble-web | 2 +- utils/cobbzilla-utils | 2 +- 30 files changed, 111 insertions(+), 1538 deletions(-) create mode 100644 bubble-server/src/main/java/bubble/model/cloud/LaunchType.java delete mode 100644 bubble-server/src/main/resources/apps.json create mode 100644 bubble-server/src/main/resources/db/migration/V2020091801__add_network_launch_type.sql diff --git a/bubble-server/src/main/java/bubble/cloud/compute/ComputeServiceDriverBase.java b/bubble-server/src/main/java/bubble/cloud/compute/ComputeServiceDriverBase.java index 160fd2ea..8100d1fc 100644 --- a/bubble-server/src/main/java/bubble/cloud/compute/ComputeServiceDriverBase.java +++ b/bubble-server/src/main/java/bubble/cloud/compute/ComputeServiceDriverBase.java @@ -39,9 +39,9 @@ public abstract class ComputeServiceDriverBase @Override public void postSetup() { final String prefix = "postSetup("+getClass().getSimpleName()+"/"+cloud.getUuid()+"): "; - if (configuration.isSelfSage()) { + if (configuration.getThisNetwork().sage()) { if (cloud.delegated()) { - log.info(prefix+"NOT starting NodeReaper for delegated driver"); + log.info(prefix + "NOT starting NodeReaper for delegated driver"); } else { synchronized (reapers) { if (reapers.get(getCredentials()) == null) { diff --git a/bubble-server/src/main/java/bubble/cloud/geoLocation/GeoLocateServiceDriverBase.java b/bubble-server/src/main/java/bubble/cloud/geoLocation/GeoLocateServiceDriverBase.java index d54cf476..83ff3eaa 100644 --- a/bubble-server/src/main/java/bubble/cloud/geoLocation/GeoLocateServiceDriverBase.java +++ b/bubble-server/src/main/java/bubble/cloud/geoLocation/GeoLocateServiceDriverBase.java @@ -10,6 +10,7 @@ import lombok.Cleanup; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; import org.cobbzilla.util.collection.NameAndValue; import org.cobbzilla.util.handlebars.HandlebarsUtil; import org.cobbzilla.util.http.HttpMeta; @@ -21,8 +22,7 @@ import org.cobbzilla.util.io.TempDir; import org.cobbzilla.wizard.cache.redis.RedisService; import org.springframework.beans.factory.annotation.Autowired; -import java.io.File; -import java.io.IOException; +import java.io.*; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; @@ -139,9 +139,15 @@ public abstract class GeoLocateServiceDriverBase extends CloudServiceDriverBa private File downloadDbFile(HttpRequestBean request, File archive) throws IOException { Exception lastEx = null; + if (!archive.getParentFile().exists()) { + mkdirOrDie(archive.getParentFile()); + } for (int i=0; i implements SqlViewSearc final BubbleNetwork thisNetwork = selfNodeService.getThisNetwork(); if (parentEntity.delegated() && thisNetwork != null - && thisNetwork.getInstallType() == AnsibleInstallType.node - && thisNetwork.getComputeSizeType() != ComputeNodeSizeType.local) { + && thisNetwork.node() + && thisNetwork.local()) { // on a node, sub-accounts can use the same cloud/config/credentials as their admin return accountEntity.setDelegated(parentEntity.getDelegated()) .setCredentialsJson(parentEntity.getCredentialsJson()) diff --git a/bubble-server/src/main/java/bubble/dao/account/AccountSshKeyDAO.java b/bubble-server/src/main/java/bubble/dao/account/AccountSshKeyDAO.java index 56b3e012..ebc6bd27 100644 --- a/bubble-server/src/main/java/bubble/dao/account/AccountSshKeyDAO.java +++ b/bubble-server/src/main/java/bubble/dao/account/AccountSshKeyDAO.java @@ -9,7 +9,6 @@ import bubble.dao.cloud.BubbleNetworkDAO; import bubble.model.account.Account; import bubble.model.account.AccountSshKey; import bubble.model.bill.AccountPlan; -import bubble.model.cloud.AnsibleInstallType; import bubble.model.cloud.BubbleNetwork; import bubble.server.BubbleConfiguration; import lombok.extern.slf4j.Slf4j; @@ -53,7 +52,7 @@ public class AccountSshKeyDAO extends AccountOwnedEntityDAO { final Account owner = accountDAO.findByUuid(key.getAccount()); final BubbleNetwork thisNetwork = configuration.getThisNetwork(); - if (thisNetwork == null || thisNetwork.getInstallType() == AnsibleInstallType.sage) { + if (thisNetwork == null || thisNetwork.sage()) { // only allow installation of a key on a sage if the user is the first admin and has no keys final Account firstAdmin = accountDAO.getFirstAdmin(); if (owner.getUuid().equals(firstAdmin.getUuid())) { @@ -65,7 +64,7 @@ public class AccountSshKeyDAO extends AccountOwnedEntityDAO { } else { // admin keys are always installed on a node // never install key for non-admin - key.setInstallSshKey(owner.admin() && thisNetwork.getInstallType() == AnsibleInstallType.node); + key.setInstallSshKey(owner.admin() && thisNetwork.node()); } final String hash = sha256_hex(key.getSshPublicKey()); diff --git a/bubble-server/src/main/java/bubble/dao/cloud/BubbleNetworkDAO.java b/bubble-server/src/main/java/bubble/dao/cloud/BubbleNetworkDAO.java index 13d68c3c..e9e9d554 100644 --- a/bubble-server/src/main/java/bubble/dao/cloud/BubbleNetworkDAO.java +++ b/bubble-server/src/main/java/bubble/dao/cloud/BubbleNetworkDAO.java @@ -46,7 +46,7 @@ public class BubbleNetworkDAO extends AccountOwnedEntityDAO { if (errors.hasSuggestedName()) network.setName(errors.getSuggestedName()); } if (!network.hasNickname()) network.setNickname(network.getName()); - final AnsibleInstallType installType = network.hasForkHost() && configuration.isSageLauncher() + final AnsibleInstallType installType = network.hasForkHost() && network.getLaunchType() == LaunchType.fork_sage && configuration.isSageLauncher() ? AnsibleInstallType.sage : AnsibleInstallType.node; network.setInstallType(installType); diff --git a/bubble-server/src/main/java/bubble/main/rekey/RekeyReaderMain.java b/bubble-server/src/main/java/bubble/main/rekey/RekeyReaderMain.java index 99431330..5531f3ea 100644 --- a/bubble-server/src/main/java/bubble/main/rekey/RekeyReaderMain.java +++ b/bubble-server/src/main/java/bubble/main/rekey/RekeyReaderMain.java @@ -57,7 +57,7 @@ public class RekeyReaderMain extends BaseMain { } protected Iterator getEntityProducer(BubbleConfiguration fromConfig, AtomicReference error) { - return new FullEntityIterator(fromConfig, null, error); + return new FullEntityIterator(fromConfig, null, null, null, error); } } diff --git a/bubble-server/src/main/java/bubble/model/bill/AccountPlan.java b/bubble-server/src/main/java/bubble/model/bill/AccountPlan.java index b2506ebb..8001fe32 100644 --- a/bubble-server/src/main/java/bubble/model/bill/AccountPlan.java +++ b/bubble-server/src/main/java/bubble/model/bill/AccountPlan.java @@ -10,6 +10,7 @@ import bubble.model.account.HasNetwork; import bubble.model.cloud.BubbleDomain; import bubble.model.cloud.BubbleNetwork; import bubble.model.cloud.CloudService; +import bubble.model.cloud.LaunchType; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Getter; import lombok.NoArgsConstructor; @@ -46,7 +47,7 @@ public class AccountPlan extends IdentifiableBase implements HasNetwork { public static final String[] UPDATE_FIELDS = {"description", "paymentMethod", "paymentMethodObject"}; public static final String[] CREATE_FIELDS = ArrayUtil.append(UPDATE_FIELDS, - "name", "forkHost", "locale", "timezone", "domain", "network", + "name", "launchType", "forkHost", "locale", "timezone", "domain", "network", "sshKey", "syncAccount", "launchLock", "sendErrors", "sendMetrics", "plan", "footprint"); @SuppressWarnings("unused") @@ -159,6 +160,9 @@ public class AccountPlan extends IdentifiableBase implements HasNetwork { @JsonIgnore @Transient @Getter @Setter private transient Account accountObject = null; public boolean hasAccountObject () { return account != null; } + @Transient @Getter @Setter private transient LaunchType launchType = null; + public boolean hasLaunchType () { return launchType != null; } + @Transient @Getter @Setter private transient String forkHost = null; public boolean hasForkHost () { return !empty(forkHost); } @@ -195,6 +199,7 @@ public class AccountPlan extends IdentifiableBase implements HasNetwork { .setFootprint(getFootprint()) .setComputeSizeType(plan.getComputeSizeType()) .setStorage(storage.getUuid()) + .setLaunchType(hasForkHost() && hasLaunchType() ? getLaunchType() : LaunchType.node) .setForkHost(hasForkHost() ? getForkHost() : null); } diff --git a/bubble-server/src/main/java/bubble/model/cloud/BubbleNetwork.java b/bubble-server/src/main/java/bubble/model/cloud/BubbleNetwork.java index 50a372d4..94c74c58 100644 --- a/bubble-server/src/main/java/bubble/model/cloud/BubbleNetwork.java +++ b/bubble-server/src/main/java/bubble/model/cloud/BubbleNetwork.java @@ -136,6 +136,10 @@ public class BubbleNetwork extends IdentifiableBase implements HasNetwork, HasBu @ECIndex @Column(nullable=false, updatable=false, length=60) @ECField(index=70) @Enumerated(EnumType.STRING) @Getter @Setter private AnsibleInstallType installType; + public boolean sage() { return installType == AnsibleInstallType.sage; } + public boolean notSage() { return !sage(); } + public boolean node() { return installType == AnsibleInstallType.node; } + public boolean notNode() { return !node(); } @ECSearchable @ECField(index=80) @ECForeignKey(entity=AccountSshKey.class) @@ -146,6 +150,7 @@ public class BubbleNetwork extends IdentifiableBase implements HasNetwork, HasBu @ECSearchable @ECField(index=90) @ECIndex @Column(nullable=false, updatable=false, length=20) @Enumerated(EnumType.STRING) @Getter @Setter private ComputeNodeSizeType computeSizeType; + public boolean local() { return computeSizeType == ComputeNodeSizeType.local; } @ECSearchable @ECField(index=100) @ECForeignKey(entity=BubbleFootprint.class) @@ -202,8 +207,11 @@ public class BubbleNetwork extends IdentifiableBase implements HasNetwork, HasBu public boolean hasForkHost () { return !empty(forkHost); } public boolean fork() { return hasForkHost(); } - @ECSearchable @ECField(index=190) - @Column(length=20) + @ECField(index=190) @Column(length=20, updatable=false) + @Enumerated(EnumType.STRING) @Getter @Setter private LaunchType launchType = null; + public boolean hasLaunchType () { return launchType != null; } + + @ECSearchable @ECField(index=200) @Column(length=20) @Enumerated(EnumType.STRING) @Getter @Setter private BubbleNetworkState state = created; public String hostFromFqdn(String fqdn) { diff --git a/bubble-server/src/main/java/bubble/model/cloud/BubbleNode.java b/bubble-server/src/main/java/bubble/model/cloud/BubbleNode.java index 7f1465ad..e84d3c0c 100644 --- a/bubble-server/src/main/java/bubble/model/cloud/BubbleNode.java +++ b/bubble-server/src/main/java/bubble/model/cloud/BubbleNode.java @@ -131,6 +131,8 @@ public class BubbleNode extends IdentifiableBase implements HasNetwork, HasBubbl @ECIndex @Column(nullable=false, updatable=false, length=60) @Enumerated(EnumType.STRING) @Getter @Setter private AnsibleInstallType installType; + public boolean sage() { return installType == AnsibleInstallType.sage; } + public boolean node() { return installType == AnsibleInstallType.node; } @ECSearchable @ECField(index=50) @ECForeignKey(entity=BubbleNode.class, cascade=false) diff --git a/bubble-server/src/main/java/bubble/model/cloud/LaunchType.java b/bubble-server/src/main/java/bubble/model/cloud/LaunchType.java new file mode 100644 index 00000000..eb6c8a7b --- /dev/null +++ b/bubble-server/src/main/java/bubble/model/cloud/LaunchType.java @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2020 Bubble, Inc. All rights reserved. + * For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ + */ +package bubble.model.cloud; + +import com.fasterxml.jackson.annotation.JsonCreator; + +import static bubble.ApiConstants.enumFromString; + +public enum LaunchType { + + node, fork_node, fork_sage; + + @JsonCreator public static LaunchType fromString(String v) { return enumFromString(LaunchType.class, v); } + +} diff --git a/bubble-server/src/main/java/bubble/notify/NewNodeNotification.java b/bubble-server/src/main/java/bubble/notify/NewNodeNotification.java index 00983f26..5356ccc7 100644 --- a/bubble-server/src/main/java/bubble/notify/NewNodeNotification.java +++ b/bubble-server/src/main/java/bubble/notify/NewNodeNotification.java @@ -8,6 +8,7 @@ import bubble.cloud.CloudAndRegion; import bubble.model.account.AccountContact; import bubble.model.cloud.BubbleNetwork; import bubble.model.cloud.BubbleNode; +import bubble.model.cloud.LaunchType; import bubble.model.cloud.NetLocation; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Getter; @@ -51,6 +52,8 @@ public class NewNodeNotification { @Getter @Setter private Boolean fork; public boolean fork() { return fork != null && fork; } + @Getter @Setter private LaunchType launchType; + @Getter @Setter private String restoreKey; public boolean hasRestoreKey () { return !empty(restoreKey); } diff --git a/bubble-server/src/main/java/bubble/notify/NotificationHandler_sync_account.java b/bubble-server/src/main/java/bubble/notify/NotificationHandler_sync_account.java index aa5c006b..ab9992c6 100644 --- a/bubble-server/src/main/java/bubble/notify/NotificationHandler_sync_account.java +++ b/bubble-server/src/main/java/bubble/notify/NotificationHandler_sync_account.java @@ -7,7 +7,6 @@ package bubble.notify; import bubble.dao.account.AccountDAO; import bubble.dao.account.AccountPolicyDAO; import bubble.dao.cloud.BubbleNodeDAO; -import bubble.model.cloud.AnsibleInstallType; import bubble.model.cloud.notify.ReceivedNotification; import bubble.service.account.SyncAccountNotification; import lombok.extern.slf4j.Slf4j; @@ -49,7 +48,7 @@ public class NotificationHandler_sync_account extends ReceivedNotificationHandle localAccount.getHashedPassword().setHashedPassword(incomingHashedPassword); // if we are a node, set skipSync so we don't get caught in an infinite loop // (the node would notify the sage, which would notify the node, ad infinitum) - localAccount.setSkipSync(configuration.getThisNetwork().getInstallType() == AnsibleInstallType.node); + localAccount.setSkipSync(configuration.getThisNetwork().node()); // update password, if we are a sage, this will notify all networks of password change accountDAO.update(localAccount); } @@ -63,7 +62,7 @@ public class NotificationHandler_sync_account extends ReceivedNotificationHandle } localPolicy.update(incomingPolicy); localPolicy.setAccountContactsJson(incomingPolicy.getAccountContactsJson()); - localPolicy.setSkipSync(configuration.getThisNetwork().getInstallType() == AnsibleInstallType.node); + localPolicy.setSkipSync(configuration.getThisNetwork().node()); accountPolicyDAO.update(localPolicy); } } diff --git a/bubble-server/src/main/java/bubble/resources/account/AuthResource.java b/bubble-server/src/main/java/bubble/resources/account/AuthResource.java index ce516dff..d1092d89 100644 --- a/bubble-server/src/main/java/bubble/resources/account/AuthResource.java +++ b/bubble-server/src/main/java/bubble/resources/account/AuthResource.java @@ -432,8 +432,9 @@ public class AuthResource { final BubbleNetwork thisNetwork = configuration.getThisNetwork(); if (thisNetwork != null && thisNetwork.syncAccount() - && thisNetwork.getInstallType() == AnsibleInstallType.node - && configuration.hasSageNode()) { + && thisNetwork.node() + && configuration.hasSageNode() + && !configuration.isSelfSage()) { // check if session is valid on sage @Cleanup final BubbleNodeClient sageClient = configuration.getSageNode().getApiQuickClient(configuration); try { diff --git a/bubble-server/src/main/java/bubble/server/BubbleConfiguration.java b/bubble-server/src/main/java/bubble/server/BubbleConfiguration.java index 6724d59d..6123a988 100644 --- a/bubble-server/src/main/java/bubble/server/BubbleConfiguration.java +++ b/bubble-server/src/main/java/bubble/server/BubbleConfiguration.java @@ -143,12 +143,13 @@ public class BubbleConfiguration extends PgRestServerConfiguration return selfNode != null && selfNode.selfSage(); } @JsonIgnore @Transient public boolean isSageLauncher() { - return isSelfSage() || !hasSageNode(); + final BubbleNetwork thisNetwork = getThisNetwork(); + return (isSelfSage() || !hasSageNode()) && thisNetwork.sage(); } @JsonIgnore @Transient public boolean isSage() { final BubbleNetwork thisNetwork = getThisNetwork(); - return thisNetwork != null && thisNetwork.getInstallType() == AnsibleInstallType.sage; + return thisNetwork != null && thisNetwork.sage(); } @JsonIgnore @Transient public synchronized BubbleNetwork getThisNetwork () { @@ -356,7 +357,7 @@ public class BubbleConfiguration extends PgRestServerConfiguration {TAG_ALLOW_REGISTRATION, thisNetwork == null ? null : thisNetwork.getBooleanTag(TAG_ALLOW_REGISTRATION, false)}, {TAG_NETWORK_UUID, thisNetwork == null ? null : thisNetwork.getUuid()}, {TAG_SAGE_LAUNCHER, thisNetwork == null || isSageLauncher()}, - {TAG_BUBBLE_NODE, isSageLauncher() || thisNetwork == null ? null : thisNetwork.getInstallType() == AnsibleInstallType.node}, + {TAG_BUBBLE_NODE, isSageLauncher() || thisNetwork == null ? null : thisNetwork.node()}, {TAG_PAYMENTS_ENABLED, cloudDAO.paymentsEnabled()}, {TAG_PROMO_CODE_POLICY, getPromoCodePolicy().name()}, {TAG_REQUIRE_SEND_METRICS, requireSendMetrics()}, diff --git a/bubble-server/src/main/java/bubble/server/listener/NodeInitializerListener.java b/bubble-server/src/main/java/bubble/server/listener/NodeInitializerListener.java index f2c1c3ef..745382d6 100644 --- a/bubble-server/src/main/java/bubble/server/listener/NodeInitializerListener.java +++ b/bubble-server/src/main/java/bubble/server/listener/NodeInitializerListener.java @@ -7,14 +7,13 @@ package bubble.server.listener; import bubble.dao.account.AccountDAO; import bubble.dao.cloud.CloudServiceDAO; import bubble.model.account.Account; -import bubble.model.cloud.AnsibleInstallType; import bubble.model.cloud.BubbleNetwork; import bubble.model.cloud.BubbleNode; import bubble.model.cloud.CloudService; import bubble.server.BubbleConfiguration; import bubble.service.boot.SelfNodeService; -import bubble.service.device.DeviceService; import bubble.service.cloud.NetworkMonitorService; +import bubble.service.device.DeviceService; import bubble.service.device.StandardFlexRouterService; import bubble.service.stream.AppDataCleaner; import bubble.service.stream.AppPrimerService; @@ -111,7 +110,7 @@ public class NodeInitializerListener extends RestServerLifecycleListenerBase { @@ -165,7 +167,7 @@ public class StandardSelfNodeService implements SelfNodeService { } // start RefundService if payments are enabled and this is a SageLauncher - if (c.paymentsEnabled() && c.isSageLauncher()) { + if (c.paymentsEnabled() && c.isSageLauncher() && thisNode.sage()) { log.info("onStart: starting BillingService and RefundService"); c.getBean(BillingService.class).start(); c.getBean(StandardRefundService.class).start(); @@ -435,7 +437,7 @@ public class StandardSelfNodeService implements SelfNodeService { @Override public BubblePlan getThisPlan() { final BubbleNetwork network = safeGetThisNetwork(); if (network == null) return null; - if (network.getInstallType() != AnsibleInstallType.node) return null; + if (network.notNode()) return null; final AccountPlan accountPlan = accountPlanDAO.findByNetwork(network.getUuid()); if (accountPlan == null) return null; return planDAO.findByUuid(accountPlan.getPlan()); @@ -451,8 +453,7 @@ public class StandardSelfNodeService implements SelfNodeService { return ttl < 0 ? Optional.empty() : Optional.of(now() + ttl * 1000); } - @Override - public void setLogFlag(final boolean logFlag, @NonNull final Optional ttlInSeconds) { + @Override public void setLogFlag(final boolean logFlag, @NonNull final Optional ttlInSeconds) { if (logFlag) { getNodeConfig().set_plaintext(REDIS_LOG_FLAG_KEY, "true", EX, ttlInSeconds.orElse(isSelfSage() ? TTL_LOG_FLAG_SAGE : TTL_LOG_FLAG_NODE)); diff --git a/bubble-server/src/main/java/bubble/service/cloud/AnsiblePrepService.java b/bubble-server/src/main/java/bubble/service/cloud/AnsiblePrepService.java index e26ff231..ed5b6e06 100644 --- a/bubble-server/src/main/java/bubble/service/cloud/AnsiblePrepService.java +++ b/bubble-server/src/main/java/bubble/service/cloud/AnsiblePrepService.java @@ -16,6 +16,7 @@ import bubble.model.bill.BubblePlanApp; import bubble.model.cloud.AnsibleInstallType; import bubble.model.cloud.BubbleNetwork; import bubble.model.cloud.BubbleNode; +import bubble.model.cloud.LaunchType; import bubble.server.BubbleConfiguration; import bubble.service.dbfilter.DatabaseFilterService; import com.github.jknack.handlebars.Handlebars; @@ -61,6 +62,7 @@ public class AnsiblePrepService { ComputeServiceDriver computeDriver, ValidationResult errors, boolean fork, + LaunchType launchType, String restoreKey) throws IOException { final BubbleConfiguration c = configuration; @@ -113,7 +115,7 @@ public class AnsiblePrepService { } // Copy database with new encryption key - final String key = dbFilter.copyDatabase(fork, network, node, account, planApps, new File(bubbleFilesDir, "bubble.sql.gz")); + final String key = dbFilter.copyDatabase(fork, launchType, network, node, account, planApps, new File(bubbleFilesDir, "bubble.sql.gz")); ctx.put("dbEncryptionKey", key); // if this is a fork, and current server is local, then sage will be self diff --git a/bubble-server/src/main/java/bubble/service/cloud/NodeLaunchMonitor.java b/bubble-server/src/main/java/bubble/service/cloud/NodeLaunchMonitor.java index c4fb55b2..60689b26 100644 --- a/bubble-server/src/main/java/bubble/service/cloud/NodeLaunchMonitor.java +++ b/bubble-server/src/main/java/bubble/service/cloud/NodeLaunchMonitor.java @@ -4,7 +4,6 @@ */ package bubble.service.cloud; -import bubble.model.cloud.AnsibleInstallType; import bubble.model.cloud.BubbleNetwork; import bubble.notify.NewNodeNotification; import bubble.server.BubbleConfiguration; @@ -80,7 +79,7 @@ public class NodeLaunchMonitor extends SimpleDaemon { if (thisNetwork == null) { die("register: thisNetwork is null"); - } else if (configuration.isSageLauncher() || thisNetwork.getInstallType() == AnsibleInstallType.sage) { + } else if (thisNetwork.sage()) { if (log.isInfoEnabled()) log.info("register: first registration, starting launch monitor"); start(); diff --git a/bubble-server/src/main/java/bubble/service/cloud/StandardNetworkService.java b/bubble-server/src/main/java/bubble/service/cloud/StandardNetworkService.java index 58dcc47f..d58ccdea 100644 --- a/bubble-server/src/main/java/bubble/service/cloud/StandardNetworkService.java +++ b/bubble-server/src/main/java/bubble/service/cloud/StandardNetworkService.java @@ -352,7 +352,7 @@ public class StandardNetworkService implements NetworkService { if (!setupOk) return launchFailureCanRetry(node, "newNode: error setting up, all retries failed for node: "+node.getUuid()); // wait for node to be ready - if (node.getInstallType() == AnsibleInstallType.node) { + if (node.node()) { final long readyStart = now(); boolean ready = false; Exception lastEx = null; @@ -479,7 +479,7 @@ public class StandardNetworkService implements NetworkService { progressMeter.write(METER_TICK_PREPARING_ROLES); final Map ctx = ansiblePrep.prepAnsible( automation, bubbleFilesDir, account, network, node, computeDriver, - errors, nn.fork(), nn.getRestoreKey()); + errors, nn.fork(), nn.getLaunchType(), nn.getRestoreKey()); if (errors.isInvalid()) { progressMeter.error(METER_ERROR_ROLE_VALIDATION_ERRORS); fatalLaunchFailure(node, new MultiViolationException(errors.getViolationBeans())); @@ -519,7 +519,7 @@ public class StandardNetworkService implements NetworkService { writeFile(bubbleFilesDir, null, SAGE_KEY_JSON, json(BubbleNodeKey.sageMask(sageKey))); // write packer keys if launching sage - if (network.getInstallType() == AnsibleInstallType.sage) { + if (network.sage()) { final File packerPubKeyFile = new File(bubbleFilesDir, PACKER_KEY_NAME+".pub"); copyFile(packerService.getPackerPublicKey(), packerPubKeyFile); @@ -726,6 +726,7 @@ public class StandardNetworkService implements NetworkService { final NewNodeNotification newNodeRequest = new NewNodeNotification() .setFork(network.fork()) + .setLaunchType(network.getLaunchType()) .setNodeHost(network) .setNetLocation(netLocation) .setLock(lock); diff --git a/bubble-server/src/main/java/bubble/service/dbfilter/DatabaseFilterService.java b/bubble-server/src/main/java/bubble/service/dbfilter/DatabaseFilterService.java index 4ec8c95d..504747f2 100644 --- a/bubble-server/src/main/java/bubble/service/dbfilter/DatabaseFilterService.java +++ b/bubble-server/src/main/java/bubble/service/dbfilter/DatabaseFilterService.java @@ -12,6 +12,7 @@ import bubble.model.account.Account; import bubble.model.bill.BubblePlanApp; import bubble.model.cloud.BubbleNetwork; import bubble.model.cloud.BubbleNode; +import bubble.model.cloud.LaunchType; import bubble.server.BubbleConfiguration; import lombok.Cleanup; import lombok.extern.slf4j.Slf4j; @@ -53,11 +54,12 @@ public class DatabaseFilterService { public static final String ENV_OLD_DB_KEY = "OLD_DB_KEY"; public static final String ENV_NEW_DB_KEY = "NEW_DB_KEY"; - public static final String[] FLYWAY_DUMP_OPTIONS = {"--table=flyway_schema_history", "--data-only"}; + public static final String[] FLYWAY_DUMP_OPTIONS = {"--table="+getFlywayTableName(), "--data-only"}; @Autowired private BubbleConfiguration configuration; public String copyDatabase(boolean fork, + LaunchType launchType, BubbleNetwork network, BubbleNode node, Account account, @@ -112,7 +114,7 @@ public class DatabaseFilterService { @Override public RekeyOptions getOptions() { return readerOptions; } @Override protected Iterator getEntityProducer(BubbleConfiguration fromConfig, AtomicReference error) { return fork - ? new FullEntityIterator(configuration, network, readerError) + ? new FullEntityIterator(configuration, account, network, launchType, readerError) : new FilteredEntityIterator(configuration, account, network, node, planApps, readerError); } }.runInBackground("RekeyReaderMain.reader", readerError::set); diff --git a/bubble-server/src/main/java/bubble/service/dbfilter/FullEntityIterator.java b/bubble-server/src/main/java/bubble/service/dbfilter/FullEntityIterator.java index 81be5085..84fa5be1 100644 --- a/bubble-server/src/main/java/bubble/service/dbfilter/FullEntityIterator.java +++ b/bubble-server/src/main/java/bubble/service/dbfilter/FullEntityIterator.java @@ -4,32 +4,49 @@ */ package bubble.service.dbfilter; +import bubble.dao.device.DeviceDAO; +import bubble.model.account.Account; import bubble.model.cloud.BubbleNetwork; +import bubble.model.cloud.LaunchType; import bubble.server.BubbleConfiguration; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.atomic.AtomicReference; +import static bubble.model.device.Device.newUninitializedDevice; import static org.cobbzilla.wizard.dao.AbstractCRUDDAO.ORDER_CTIME_ASC; @Slf4j public class FullEntityIterator extends EntityIterator { private final BubbleConfiguration config; + private final Account account; private final BubbleNetwork network; + private final LaunchType launchType; public FullEntityIterator (BubbleConfiguration config, + Account account, BubbleNetwork network, + LaunchType launchType, AtomicReference error) { super(error); this.config = config; this.network = network; + this.account = account; + this.launchType = launchType; } protected void iterate() { config.getEntityClasses() .forEach(c -> addEntities(true, c, config.getDaoForEntityClass(c).findAll(ORDER_CTIME_ASC), network, null, null)); + if (account != null && launchType != null && launchType == LaunchType.fork_node) { + // add an initial device so that algo starts properly the first time + // name and totp key will be overwritten when the device is initialized for use + log.info("iterate: creating a single dummy device for algo to start properly"); + final var initDevice = newUninitializedDevice(network.getUuid(), account.getUuid()); + add(config.getBean(DeviceDAO.class).create(initDevice)); + } log.info("iterate: completed"); } diff --git a/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java b/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java index b9f64a3e..85a52a3b 100644 --- a/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java +++ b/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java @@ -9,7 +9,6 @@ import bubble.dao.app.*; import bubble.dao.device.DeviceDAO; import bubble.model.account.Account; import bubble.model.app.*; -import bubble.model.cloud.AnsibleInstallType; import bubble.model.cloud.BubbleNetwork; import bubble.model.device.Device; import bubble.rule.AppRuleDriver; @@ -54,7 +53,7 @@ public class StandardAppPrimerService implements AppPrimerService { log.info("initPrimingEnabled: thisNetwork is null, not priming"); return false; } - if (thisNetwork.getInstallType() != AnsibleInstallType.node) { + if (thisNetwork.notNode()) { log.info("initPrimingEnabled: thisNetwork is not a node, not priming"); return false; } diff --git a/bubble-server/src/main/resources/META-INF/bubble/bubble.properties b/bubble-server/src/main/resources/META-INF/bubble/bubble.properties index beb64e55..5e08d551 100644 --- a/bubble-server/src/main/resources/META-INF/bubble/bubble.properties +++ b/bubble-server/src/main/resources/META-INF/bubble/bubble.properties @@ -1 +1 @@ -bubble.version=Adventure 1.2.1 +bubble.version=Adventure 1.2.2 diff --git a/bubble-server/src/main/resources/apps.json b/bubble-server/src/main/resources/apps.json deleted file mode 100644 index 04e5b8d9..00000000 --- a/bubble-server/src/main/resources/apps.json +++ /dev/null @@ -1,1486 +0,0 @@ -{ - "id" : "979b7850-ed94-4200-97da-4ea73045fb6f", - "drivers" : [ { - "uuid" : "0e022cda-7069-41f8-ba43-f6ab304ff085", - "name" : "BubbleBlockRuleDriver", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "template" : true, - "enabled" : true, - "driverClass" : "bubble.rule.bblock.BubbleBlockRuleDriver", - "version" : { - "major" : 1, - "minor" : 0, - "patch" : 0 - }, - "userConfig" : { - "fields" : [ ] - }, - "shortId" : "0e022cda" - }, { - "uuid" : "f314f0ed-2144-4141-850d-c607a7ab010c", - "name" : "JsUserBlockerRuleDriver", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "template" : true, - "enabled" : true, - "driverClass" : "bubble.rule.social.block.JsUserBlockerRuleDriver", - "version" : { - "major" : 1, - "minor" : 0, - "patch" : 0 - }, - "userConfig" : { - "fields" : [ ] - }, - "shortId" : "f314f0ed" - }, { - "uuid" : "c487b2ba-65f7-462f-af7f-c1ca2af5bc8a", - "name" : "TlsPassthruRuleDriver", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "template" : true, - "enabled" : true, - "driverClass" : "bubble.rule.passthru.TlsPassthruRuleDriver", - "version" : { - "major" : 1, - "minor" : 0, - "patch" : 0 - }, - "userConfig" : { - "fields" : [ ] - }, - "shortId" : "c487b2ba" - }, { - "uuid" : "49125b81-03af-438d-8603-7dab3c9f1111", - "name" : "TrafficAnalyticsRuleDriver", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "template" : true, - "enabled" : true, - "driverClass" : "bubble.rule.analytics.TrafficAnalyticsRuleDriver", - "version" : { - "major" : 1, - "minor" : 0, - "patch" : 0 - }, - "userConfig" : { - "fields" : [ ] - }, - "shortId" : "49125b81" - }, { - "uuid" : "abc524fb-6b40-4e67-b8a3-582b6fb2208e", - "name" : "UserBlockerRuleDriver", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "template" : true, - "enabled" : true, - "driverClass" : "bubble.rule.social.block.UserBlockerRuleDriver", - "version" : { - "major" : 1, - "minor" : 0, - "patch" : 0 - }, - "userConfig" : { - "fields" : [ ] - }, - "shortId" : "abc524fb" - } ], - "apps" : [ { - "uuid" : "5e23d5ca-e2eb-4317-a992-7081383961b1", - "children" : { - "AppMatcher" : [ { - "uuid" : "a4a22808-8b06-470c-bbc0-21a3934a367c", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "name" : "TrafficAnalyticsMatcher", - "app" : "5e23d5ca-e2eb-4317-a992-7081383961b1", - "site" : "fc07ab36-d89e-42ca-8e8f-4a50ffaec5aa", - "fqdn" : "*", - "urlRegex" : ".*", - "rule" : "e030e9d7-5fee-4e00-9164-0666c18389c2", - "template" : true, - "enabled" : true, - "connCheck" : false, - "requestCheck" : true, - "priority" : 0, - "shortId" : "a4a22808" - } ], - "AppRule" : [ { - "uuid" : "e030e9d7-5fee-4e00-9164-0666c18389c2", - "name" : "traffic_analytics", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "5e23d5ca-e2eb-4317-a992-7081383961b1", - "template" : true, - "enabled" : true, - "priority" : 0, - "driver" : "49125b81-03af-438d-8603-7dab3c9f1111", - "config" : { - "filterPatterns" : [ "\\.stripe\\.com", "\\.stripe\\.network" ] - }, - "shortId" : "e030e9d7" - } ], - "AppMessage" : [ { - "uuid" : "cfbafbb0-233d-4356-8c2a-735d0c132070", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "5e23d5ca-e2eb-4317-a992-7081383961b1", - "locale" : "en_US", - "priority" : 1, - "template" : true, - "enabled" : true, - "messages" : [ { - "name" : "name", - "value" : "Snitcher" - }, { - "name" : "icon", - "value" : "classpath:models/apps/analytics/snitcher-icon.svg" - }, { - "name" : "summary", - "value" : "Traffic Analytics" - }, { - "name" : "description", - "value" : "Review recent traffic for your devices. Block stuff that you don't like." - }, { - "name" : "field.ctime", - "value" : "When" - }, { - "name" : "field.requestTime", - "value" : "When" - }, { - "name" : "field.accountName", - "value" : "Account" - }, { - "name" : "field.fqdn", - "value" : "Host" - }, { - "name" : "field.device", - "value" : "Device" - }, { - "name" : "field.deviceName", - "value" : "Device" - }, { - "name" : "field.ip", - "value" : "From IP" - }, { - "name" : "field.uri", - "value" : "Path" - }, { - "name" : "field.userAgent", - "value" : "User Agent" - }, { - "name" : "field.referer", - "value" : "Referer" - }, { - "name" : "field.data", - "value" : "Count" - }, { - "name" : "param.meta2", - "value" : "Site" - }, { - "name" : "param.device", - "value" : "Device" - }, { - "name" : "action.filterHost", - "value" : "Block Host" - }, { - "name" : "action.filterUrl", - "value" : "Block URL" - }, { - "name" : "view.recent", - "value" : "Recent Traffic" - }, { - "name" : "view.recent.requestTime.format", - "value" : "{{MMM}} {{d}} @ {{h}}:{{m}}:{{s}}{{a}}" - }, { - "name" : "view.last_24_hours", - "value" : "Last 24 Hours" - }, { - "name" : "view.last_24_hours.ctime.format", - "value" : "{{MMM}} {{d}} @ {{h}}{{a}}" - }, { - "name" : "view.last_7_days", - "value" : "Last 7 Days" - }, { - "name" : "view.last_7_days.ctime.format", - "value" : "{{MMM}} {{d}}, {{YYYY}}" - }, { - "name" : "view.last_30_days", - "value" : "Last 30 Days" - }, { - "name" : "view.last_30_days.ctime.format", - "value" : "{{MMM}} {{d}}, {{YYYY}}" - }, { - "name" : "config.view.manageFilters", - "value" : "Manage Filters" - }, { - "name" : "config.field.analyticsFilter", - "value" : "Filter Pattern" - }, { - "name" : "config.field.analyticsFilter.description", - "value" : "Skip logging for URLs that match this pattern" - }, { - "name" : "config.action.addFilter", - "value" : "Add New Filter" - }, { - "name" : "config.button.addFilter", - "value" : "Add" - }, { - "name" : "config.action.removeFilter", - "value" : "Remove" - } ], - "shortId" : "cfbafbb0" - } ], - "AppSite" : [ { - "uuid" : "fc07ab36-d89e-42ca-8e8f-4a50ffaec5aa", - "name" : "All_Sites", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "5e23d5ca-e2eb-4317-a992-7081383961b1", - "template" : true, - "enabled" : true, - "description" : "All websites", - "url" : "*", - "shortId" : "fc07ab36" - } ] - }, - "name" : "TrafficAnalytics", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "url" : "https://getbubblenow.com/apps/analytics", - "description" : "Traffic analytics for your Bubble", - "canPrime" : false, - "template" : true, - "enabled" : true, - "priority" : 100, - "dataConfig" : { - "presentation" : "app", - "dataDriver" : "bubble.app.analytics.TrafficAnalyticsAppDataDriver", - "fields" : [ { - "name" : "ctime", - "displayName" : "Ctime", - "mode" : "standard", - "control" : "text", - "customFormat" : true, - "when" : "view !== \"recent\"" - }, { - "name" : "requestTime", - "displayName" : "Request Time", - "mode" : "standard", - "control" : "text", - "customFormat" : true, - "when" : "view === \"recent\"" - }, { - "name" : "accountName", - "displayName" : "Account Name", - "mode" : "standard", - "control" : "text", - "when" : "view === \"recent\"" - }, { - "name" : "deviceName", - "displayName" : "Device Name", - "mode" : "standard", - "control" : "text", - "when" : "view === \"recent\"" - }, { - "name" : "ip", - "displayName" : "Ip", - "mode" : "standard", - "control" : "text", - "when" : "view === \"recent\"" - }, { - "name" : "fqdn", - "displayName" : "Fqdn", - "mode" : "standard", - "control" : "text" - }, { - "name" : "uri", - "displayName" : "Uri", - "mode" : "standard", - "control" : "text", - "when" : "view === \"recent\"" - }, { - "name" : "userAgent", - "displayName" : "User Agent", - "mode" : "standard", - "control" : "text", - "when" : "view === \"recent\"" - }, { - "name" : "referer", - "displayName" : "Referer", - "mode" : "standard", - "control" : "text", - "when" : "view === \"recent\"" - }, { - "name" : "device", - "displayName" : "Device", - "mode" : "standard", - "control" : "text", - "when" : "view !== \"recent\"" - }, { - "name" : "data", - "displayName" : "Data", - "mode" : "standard", - "control" : "text", - "when" : "view !== \"recent\"" - } ], - "params" : [ { - "name" : "device", - "required" : false, - "index" : 10, - "displayName" : "Device", - "mode" : "standard", - "control" : "text", - "operator" : "eq", - "when" : "view !== \"recent\"" - }, { - "name" : "meta2", - "required" : false, - "index" : 20, - "displayName" : "Meta2", - "mode" : "standard", - "control" : "text", - "operator" : "like", - "when" : "view !== \"recent\"" - } ], - "actions" : [ { - "name" : "filterHost", - "when" : "view === \"recent\"", - "route" : "/app/BubbleBlock/config/manageRules/local?action=createRule&rule={{fqdn}}" - }, { - "name" : "filterUrl", - "when" : "view === \"recent\"", - "route" : "/app/BubbleBlock/config/manageRules/local?action=createRule&rule={{ encodeURIComponent( fqdn + (uri.startsWith('/') ? uri : '/'+uri) ) }}" - } ], - "views" : [ { - "presentation" : "app", - "layout" : "tiles", - "name" : "recent", - "priority" : 0 - }, { - "presentation" : "app", - "layout" : "table", - "name" : "last_24_hours", - "priority" : 0 - }, { - "presentation" : "app", - "layout" : "table", - "name" : "last_7_days", - "priority" : 0 - }, { - "presentation" : "app", - "layout" : "table", - "name" : "last_30_days", - "priority" : 0 - } ], - "configDriver" : "bubble.app.analytics.TrafficAnalyticsAppConfigDriver", - "configFields" : [ { - "name" : "analyticsFilter", - "displayName" : "Analytics Filter", - "mode" : "standard", - "control" : "text", - "truncate" : false - }, { - "name" : "ctime", - "displayName" : "Ctime", - "mode" : "standard", - "control" : "text", - "customFormat" : true, - "when" : "view !== \"recent\"" - }, { - "name" : "requestTime", - "displayName" : "Request Time", - "mode" : "standard", - "control" : "text", - "customFormat" : true, - "when" : "view === \"recent\"" - }, { - "name" : "accountName", - "displayName" : "Account Name", - "mode" : "standard", - "control" : "text", - "when" : "view === \"recent\"" - }, { - "name" : "deviceName", - "displayName" : "Device Name", - "mode" : "standard", - "control" : "text", - "when" : "view === \"recent\"" - }, { - "name" : "ip", - "displayName" : "Ip", - "mode" : "standard", - "control" : "text", - "when" : "view === \"recent\"" - }, { - "name" : "fqdn", - "displayName" : "Fqdn", - "mode" : "standard", - "control" : "text" - }, { - "name" : "uri", - "displayName" : "Uri", - "mode" : "standard", - "control" : "text", - "when" : "view === \"recent\"" - }, { - "name" : "userAgent", - "displayName" : "User Agent", - "mode" : "standard", - "control" : "text", - "when" : "view === \"recent\"" - }, { - "name" : "referer", - "displayName" : "Referer", - "mode" : "standard", - "control" : "text", - "when" : "view === \"recent\"" - }, { - "name" : "device", - "displayName" : "Device", - "mode" : "standard", - "control" : "text", - "when" : "view !== \"recent\"" - }, { - "name" : "data", - "displayName" : "Data", - "mode" : "standard", - "control" : "text", - "when" : "view !== \"recent\"" - } ], - "configViews" : [ { - "name" : "manageFilters", - "scope" : "app", - "root" : true, - "fields" : [ "analyticsFilter" ], - "actions" : [ { - "name" : "removeFilter", - "scope" : "item", - "index" : 10 - }, { - "name" : "addFilter", - "scope" : "app", - "index" : 10, - "params" : [ "analyticsFilter" ], - "button" : "addFilter" - } ] - } ] - }, - "shortId" : "5e23d5ca" - }, { - "uuid" : "12ed9f89-5335-41fe-bb14-b5a7d34b0246", - "children" : { - "AppMatcher" : [ { - "uuid" : "caa7959d-3119-456d-8d53-a0b6de9bfd71", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "name" : "BubbleBlockMatcher", - "app" : "12ed9f89-5335-41fe-bb14-b5a7d34b0246", - "site" : "5bb7f4f0-a54f-4f1e-b61a-815a05f4de44", - "fqdn" : "*", - "urlRegex" : ".*", - "rule" : "fda8e014-9209-45fb-84b3-832b6750e5b6", - "template" : true, - "enabled" : true, - "connCheck" : true, - "requestCheck" : false, - "priority" : -1000, - "shortId" : "caa7959d" - } ], - "AppRule" : [ { - "uuid" : "fda8e014-9209-45fb-84b3-832b6750e5b6", - "name" : "bubble_block", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "12ed9f89-5335-41fe-bb14-b5a7d34b0246", - "template" : true, - "enabled" : true, - "priority" : 0, - "driver" : "0e022cda-7069-41f8-ba43-f6ab304ff085", - "config" : { - "blockLists" : [ { - "name" : "EasyList", - "id" : "easylist", - "url" : "https://v.firebog.net/hosts/Easylist.txt", - "description" : "EasyList is the primary filter list that removes most adverts from international web pages, including unwanted frames, images, and objects. It is the most popular list used by many ad blockers and forms the basis of over a dozen combination and supplementary filter lists.", - "tags" : [ "ads" ] - }, { - "name" : "Peter Lowe's Ad and tracking server list", - "id" : "peter_lowes_ad_and_tracking_list", - "url" : "https://pgl.yoyo.org/adservers/serverlist.php?showintro=0;hostformat=raw", - "description" : "A comprehensive list of ad and tracking servers", - "tags" : [ "ads", "privacy" ] - }, { - "name" : "Dandelion Sprout's Anti-Malware List", - "id" : "dandelion_sprouts_anti_malware_list", - "url" : "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/Alternate%20versions%20Anti-Malware%20List/AntiMalwareABP.txt", - "description" : "Most anti-malware lists are pretty big and can cover a 5- or 6-digit amount of specific domains. But my list hereby claims to remove more than 25% of all known malware sites with just a 2-digit amount of entries. This is mostly done by blocking top-level domains that have become devastatingly abused by spammers, usually because they allowed for free and uncontrolled domain registrations. There's also additional categories that cover unusual malware and phishing domains that very few other lists seem to cover.", - "tags" : [ "malware", "phishing" ] - }, { - "name" : "Bubble Ads/Tracking List", - "id" : "bubble_ads_and_trackers1", - "url" : "https://raw.githubusercontent.com/getbubblenow/bubble-filter-lists/master/ads_and_trackers1.txt", - "description" : "Blocks lots of ads and trackers, with a focus on ads and trackers used in native mobile apps", - "tags" : [ "ads", "privacy" ] - }, { - "name" : "Bubble Custom List", - "id" : "local", - "url" : "", - "description" : "A place to maintain your own block rules for this Bubble.", - "tags" : [ "custom" ] - } ] - }, - "shortId" : "fda8e014" - } ], - "AppMessage" : [ { - "uuid" : "d9a52173-4bfa-45b6-8a53-29dc7767c05a", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "12ed9f89-5335-41fe-bb14-b5a7d34b0246", - "locale" : "en_US", - "priority" : 1, - "template" : true, - "enabled" : true, - "messages" : [ { - "name" : "name", - "value" : "Block Party!" - }, { - "name" : "icon", - "value" : "classpath:models/apps/bubble_block/blockparty-icon.svg" - }, { - "name" : "summary", - "value" : "Network Filter" - }, { - "name" : "description", - "value" : "Block adware, malware, phishing/scam sites, and much more" - }, { - "name" : "field.ctime", - "value" : "When" - }, { - "name" : "field.fqdn", - "value" : "URL" - }, { - "name" : "field.device", - "value" : "Device" - }, { - "name" : "field.uri", - "value" : "Path" - }, { - "name" : "field.data", - "value" : "Count" - }, { - "name" : "view.last_24_hours", - "value" : "Last 24 Hours" - }, { - "name" : "view.last_24_hours.ctime.format", - "value" : "{{MMM}} {{d}} @ {{h}}{{a}}" - }, { - "name" : "view.last_7_days", - "value" : "Last 7 Days" - }, { - "name" : "view.last_7_days.ctime.format", - "value" : "{{MMM}} {{d}}, {{YYYY}}" - }, { - "name" : "view.last_30_days", - "value" : "Last 30 Days" - }, { - "name" : "view.last_30_days.ctime.format", - "value" : "{{MMM}} {{d}}, {{YYYY}}" - }, { - "name" : "config.view.manageLists", - "value" : "Manage Filter Lists" - }, { - "name" : "config.view.manageList", - "value" : "Manage Filter List" - }, { - "name" : "config.view.manageRules", - "value" : "Manage Filter Rules" - }, { - "name" : "config.view.manageUserAgents", - "value" : "Manage User-Agents" - }, { - "name" : "config.field.name", - "value" : "Name" - }, { - "name" : "config.field.description", - "value" : "Description" - }, { - "name" : "config.field.url", - "value" : "URL" - }, { - "name" : "config.field.url.description", - "value" : "URL of the Filter List" - }, { - "name" : "config.field.tagString", - "value" : "Tags" - }, { - "name" : "config.field.tagString.description", - "value" : "A comma-separated list of tags" - }, { - "name" : "config.field.tags", - "value" : "Tags" - }, { - "name" : "config.field.enabled", - "value" : "Enabled" - }, { - "name" : "config.field.rule", - "value" : "Rule" - }, { - "name" : "config.field.rule.description", - "value" : "Enter a rule. Can be a hostname, or use AdBlockPlus format" - }, { - "name" : "config.field.ruleType", - "value" : "Rule Type" - }, { - "name" : "config.field.testUrl", - "value" : "Test URL" - }, { - "name" : "config.field.testUrl.description", - "value" : "URL to check against filters" - }, { - "name" : "config.field.testUserAgent", - "value" : "Test User-Agent" - }, { - "name" : "config.field.testUserAgent.description", - "value" : "User-Agent to check against filters" - }, { - "name" : "config.field.testUrlPrimary", - "value" : "Primary" - }, { - "name" : "config.field.testUrlPrimary.description", - "value" : "A primary request will receive either an ALLOW or BLOCK decision from your Bubble. A non-primary request (for example a request for a webpage) may additionally receive a FILTER decision. This means the request will be permitted, but the response will be instrumented with Bubble filters to remove ads, malware and blocked elements." - }, { - "name" : "config.field.urlRegex", - "value" : "URL" - }, { - "name" : "config.field.urlRegex.description", - "value" : "A regular expression to match against the URL" - }, { - "name" : "config.field.userAgentRegex", - "value" : "User-Agent" - }, { - "name" : "config.field.userAgentRegex.description", - "value" : "A regular expression to match against the User-Agent" - }, { - "name" : "config.action.enableList", - "value" : "Enable" - }, { - "name" : "config.action.disableList", - "value" : "Disable" - }, { - "name" : "config.action.manageList", - "value" : "Edit" - }, { - "name" : "config.action.removeList", - "value" : "Remove" - }, { - "name" : "config.action.createList", - "value" : "Add New" - }, { - "name" : "config.button.createList", - "value" : "Add" - }, { - "name" : "config.action.updateList", - "value" : "Update" - }, { - "name" : "config.action.manageRules", - "value" : "Rules" - }, { - "name" : "config.action.manageUserAgents", - "value" : "User-Agents" - }, { - "name" : "config.action.removeRule", - "value" : "Remove Rule" - }, { - "name" : "config.action.createRule", - "value" : "Add New Rule" - }, { - "name" : "config.button.createRule", - "value" : "Add" - }, { - "name" : "config.action.createUserAgentBlock", - "value" : "Add New User-Agent Rule" - }, { - "name" : "config.button.createUserAgentBlock", - "value" : "Add" - }, { - "name" : "config.action.removeUserAgentBlock", - "value" : "Remove Rule" - }, { - "name" : "config.button.removeUserAgentBlock", - "value" : "Remove" - }, { - "name" : "config.action.testUrl", - "value" : "Test URL" - }, { - "name" : "config.button.testUrl", - "value" : "Test" - }, { - "name" : "config.response.block", - "value" : "Block" - }, { - "name" : "config.response.block.description", - "value" : "Requests to this URL would be blocked by your Bubble" - }, { - "name" : "config.response.allow", - "value" : "Allow" - }, { - "name" : "config.response.allow.description", - "value" : "Requests to this URL would be allowed by your Bubble, and would not be filtered" - }, { - "name" : "config.response.filter", - "value" : "Filter" - }, { - "name" : "config.response.filter.description", - "value" : "Requests to this URL would be allowed by your Bubble, but would be filtered" - } ], - "shortId" : "d9a52173" - } ], - "AppSite" : [ { - "uuid" : "5bb7f4f0-a54f-4f1e-b61a-815a05f4de44", - "name" : "All_Sites", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "12ed9f89-5335-41fe-bb14-b5a7d34b0246", - "template" : true, - "enabled" : true, - "description" : "All websites", - "url" : "*", - "shortId" : "5bb7f4f0" - } ] - }, - "name" : "BubbleBlock", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "url" : "https://getbubblenow.com/apps/bblock", - "description" : "Block Adware, Malware and More", - "canPrime" : true, - "template" : true, - "enabled" : true, - "priority" : 200, - "dataConfig" : { - "presentation" : "app", - "dataDriver" : "bubble.app.bblock.BubbleBlockAppDataDriver", - "fields" : [ { - "name" : "ctime", - "displayName" : "Ctime", - "mode" : "standard", - "control" : "text", - "customFormat" : true - }, { - "name" : "device", - "displayName" : "Device", - "mode" : "standard", - "control" : "text" - }, { - "name" : "fqdn", - "displayName" : "Fqdn", - "mode" : "standard", - "control" : "text" - }, { - "name" : "uri", - "displayName" : "Uri", - "mode" : "standard", - "control" : "text" - }, { - "name" : "data", - "displayName" : "Data", - "mode" : "standard", - "control" : "text" - } ], - "params" : [ { - "name" : "device", - "required" : false, - "index" : 10, - "displayName" : "Device", - "mode" : "standard", - "control" : "text", - "operator" : "eq" - } ], - "views" : [ { - "presentation" : "app", - "layout" : "table", - "name" : "last_24_hours", - "priority" : 0 - }, { - "presentation" : "app", - "layout" : "table", - "name" : "last_7_days", - "priority" : 0 - }, { - "presentation" : "app", - "layout" : "table", - "name" : "last_30_days", - "priority" : 0 - } ], - "configDriver" : "bubble.app.bblock.BubbleBlockAppConfigDriver", - "configFields" : [ { - "name" : "name", - "displayName" : "Name", - "mode" : "standard", - "control" : "text" - }, { - "name" : "description", - "displayName" : "Description", - "mode" : "standard", - "control" : "textarea" - }, { - "name" : "url", - "displayName" : "Url", - "mode" : "standard", - "type" : "http_url", - "control" : "text" - }, { - "name" : "tags", - "displayName" : "Tags", - "mode" : "standard", - "control" : "text" - }, { - "name" : "tagString", - "displayName" : "Tag String", - "mode" : "standard", - "control" : "text" - }, { - "name" : "enabled", - "displayName" : "Enabled", - "mode" : "readOnly", - "type" : "flag", - "control" : "flag" - }, { - "name" : "rule", - "displayName" : "Rule", - "mode" : "standard", - "control" : "text" - }, { - "name" : "ruleType", - "displayName" : "Rule Type", - "mode" : "readOnly", - "control" : "text" - }, { - "name" : "testUrl", - "displayName" : "Test Url", - "mode" : "standard", - "type" : "http_url", - "control" : "text" - }, { - "name" : "testUserAgent", - "required" : false, - "displayName" : "Test User Agent", - "mode" : "standard", - "control" : "text" - }, { - "name" : "testUrlPrimary", - "displayName" : "Test Url Primary", - "mode" : "standard", - "type" : "flag", - "control" : "flag" - }, { - "name" : "urlRegex", - "required" : false, - "displayName" : "Url Regex", - "mode" : "standard", - "control" : "text" - }, { - "name" : "userAgentRegex", - "displayName" : "User Agent Regex", - "mode" : "standard", - "control" : "text" - }, { - "name" : "ctime", - "displayName" : "Ctime", - "mode" : "standard", - "control" : "text", - "customFormat" : true - }, { - "name" : "device", - "displayName" : "Device", - "mode" : "standard", - "control" : "text" - }, { - "name" : "fqdn", - "displayName" : "Fqdn", - "mode" : "standard", - "control" : "text" - }, { - "name" : "uri", - "displayName" : "Uri", - "mode" : "standard", - "control" : "text" - }, { - "name" : "data", - "displayName" : "Data", - "mode" : "standard", - "control" : "text" - } ], - "configViews" : [ { - "name" : "manageLists", - "scope" : "app", - "root" : true, - "fields" : [ "name", "description", "url", "enabled", "tagString" ], - "actions" : [ { - "name" : "enableList", - "scope" : "item", - "when" : "!item.enabled", - "index" : 10 - }, { - "name" : "disableList", - "scope" : "item", - "when" : "item.enabled", - "index" : 20 - }, { - "name" : "manageList", - "scope" : "item", - "view" : "manageList", - "index" : 30 - }, { - "name" : "manageRules", - "scope" : "item", - "when" : "item.url === \\'\\'", - "view" : "manageRules", - "index" : 40 - }, { - "name" : "removeList", - "scope" : "item", - "when" : "item.url !== ''", - "index" : 50 - }, { - "name" : "createList", - "scope" : "app", - "view" : "manageList", - "index" : 10, - "params" : [ "url" ], - "button" : "createList" - }, { - "name" : "testUrl", - "scope" : "app", - "successMessage" : "decisionType", - "index" : 20, - "params" : [ "testUrl", "testUrlPrimary" ], - "button" : "testUrl" - } ] - }, { - "name" : "manageList", - "scope" : "item", - "root" : false, - "fields" : [ "name", "description", "url", "tagString", "enabled" ], - "actions" : [ { - "name" : "updateList", - "scope" : "item", - "successView" : "manageLists", - "index" : 10 - }, { - "name" : "enableList", - "scope" : "item", - "when" : "!item.enabled", - "index" : 20 - }, { - "name" : "disableList", - "scope" : "item", - "when" : "item.enabled", - "index" : 30 - }, { - "name" : "manageRules", - "scope" : "item", - "when" : "item.url === ''", - "view" : "manageRules", - "index" : 40 - }, { - "name" : "removeList", - "scope" : "item", - "when" : "item.url !== ''", - "successView" : "manageLists", - "index" : 50 - } ] - }, { - "name" : "manageRules", - "scope" : "item", - "root" : false, - "fields" : [ "rule" ], - "actions" : [ { - "name" : "removeRule", - "scope" : "item", - "index" : 10 - }, { - "name" : "createRule", - "scope" : "app", - "index" : 10, - "params" : [ "rule" ], - "button" : "createRule" - }, { - "name" : "testUrl", - "scope" : "app", - "successMessage" : "decisionType", - "index" : 20, - "params" : [ "testUrl", "testUserAgent", "testUrlPrimary" ], - "button" : "testUrl" - } ] - }, { - "name" : "manageUserAgents", - "scope" : "app", - "root" : true, - "fields" : [ "userAgentRegex", "urlRegex" ], - "actions" : [ { - "name" : "removeUserAgentBlock", - "scope" : "item", - "index" : 10 - }, { - "name" : "createUserAgentBlock", - "scope" : "app", - "index" : 10, - "params" : [ "userAgentRegex", "urlRegex" ], - "button" : "createUserAgentBlock" - }, { - "name" : "testUrl", - "scope" : "app", - "successMessage" : "decisionType", - "index" : 20, - "params" : [ "testUrl", "testUserAgent", "testUrlPrimary" ], - "button" : "testUrl" - } ] - } ] - }, - "shortId" : "12ed9f89" - }, { - "uuid" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "children" : { - "AppMatcher" : [ { - "uuid" : "a9f35a6b-7fb0-40b4-9154-ede9a481f5b7", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "name" : "HNCommentMatcher", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "site" : "7569f7f0-6ad0-4709-9a77-c217e4fc7ccb", - "fqdn" : "news.ycombinator.com", - "urlRegex" : "/item\\?id=\\d+", - "rule" : "30dfe23b-e7d7-4fe6-8aa9-9620d028df97", - "template" : true, - "enabled" : true, - "connCheck" : false, - "requestCheck" : true, - "priority" : 0, - "shortId" : "a9f35a6b" - }, { - "uuid" : "e4be80d1-56d8-4dd1-9bba-baefb0c91989", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "name" : "HNThreadsMatcher", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "site" : "7569f7f0-6ad0-4709-9a77-c217e4fc7ccb", - "fqdn" : "news.ycombinator.com", - "urlRegex" : "/threads\\?id=\\w+", - "rule" : "30dfe23b-e7d7-4fe6-8aa9-9620d028df97", - "template" : true, - "enabled" : true, - "connCheck" : false, - "requestCheck" : true, - "priority" : 0, - "shortId" : "e4be80d1" - }, { - "uuid" : "2e175923-44fd-40b4-a1da-849cc7941582", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "name" : "MRMatcher", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "site" : "76bb15ba-c184-43e4-99e6-989957e7cb62", - "fqdn" : "marginalrevolution.com", - "urlRegex" : "(/marginalrevolution)?/20\\d{2}/\\d{2}/\\w+", - "rule" : "b17ef6a7-6de9-4ab1-8335-dfd9e834008a", - "template" : true, - "enabled" : true, - "connCheck" : false, - "requestCheck" : true, - "priority" : 0, - "shortId" : "2e175923" - }, { - "uuid" : "157232b8-5ed3-4c8f-9837-c3ea6edf0eb9", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "name" : "ReasonMatcher", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "site" : "e6adce40-8b78-44a7-b7f3-394fe6856de4", - "fqdn" : "reason.com", - "urlRegex" : "/20\\d{2}/\\d{2}/\\d{2}/[-\\w]+/", - "rule" : "75716dd0-ebbd-4410-99d3-86ab0a206849", - "template" : true, - "enabled" : true, - "connCheck" : false, - "requestCheck" : true, - "priority" : 0, - "shortId" : "157232b8" - }, { - "uuid" : "7b634b87-ca36-4b13-828b-803c71a2c17c", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "name" : "TwitterMatcher", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "site" : "d78bbb36-75f0-4974-b3f3-b5cf93780582", - "fqdn" : "twitter.com", - "urlRegex" : ".*", - "rule" : "a904ee63-039d-4914-8ec7-7d5d22d9e0ca", - "template" : true, - "enabled" : true, - "connCheck" : false, - "requestCheck" : true, - "priority" : 0, - "shortId" : "7b634b87" - } ], - "AppRule" : [ { - "uuid" : "30dfe23b-e7d7-4fe6-8aa9-9620d028df97", - "name" : "hn_user_blocker", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "template" : true, - "enabled" : true, - "priority" : 0, - "driver" : "f314f0ed-2144-4141-850d-c607a7ab010c", - "config" : { - "siteJsTemplate" : "bubble/rule/social/block/site/HackerNews.js.hbs" - }, - "shortId" : "30dfe23b" - }, { - "uuid" : "b17ef6a7-6de9-4ab1-8335-dfd9e834008a", - "name" : "mr_user_blocker", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "template" : true, - "enabled" : true, - "priority" : 0, - "driver" : "f314f0ed-2144-4141-850d-c607a7ab010c", - "config" : { - "siteJsTemplate" : "bubble/rule/social/block/site/MR.js.hbs" - }, - "shortId" : "b17ef6a7" - }, { - "uuid" : "75716dd0-ebbd-4410-99d3-86ab0a206849", - "name" : "reason_user_blocker", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "template" : true, - "enabled" : true, - "priority" : 0, - "driver" : "f314f0ed-2144-4141-850d-c607a7ab010c", - "config" : { - "siteJsTemplate" : "bubble/rule/social/block/site/Reason.js.hbs" - }, - "shortId" : "75716dd0" - }, { - "uuid" : "a904ee63-039d-4914-8ec7-7d5d22d9e0ca", - "name" : "twitter_user_blocker", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "template" : true, - "enabled" : true, - "priority" : 0, - "driver" : "f314f0ed-2144-4141-850d-c607a7ab010c", - "config" : { - "siteJsTemplate" : "bubble/rule/social/block/site/Twitter.js.hbs", - "insertionRegex" : "<\\s*html[^>]*>" - }, - "shortId" : "a904ee63" - } ], - "AppMessage" : [ { - "uuid" : "aa88397b-644a-48d9-aafa-b2bc912c49cd", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "locale" : "en_US", - "priority" : 1, - "template" : true, - "enabled" : true, - "messages" : [ { - "name" : "name", - "value" : "Shadow Ban" - }, { - "name" : "icon", - "value" : "classpath:models/apps/user_block/shadowban-icon.svg" - }, { - "name" : "summary", - "value" : "User Blocker" - }, { - "name" : "description", - "value" : "Throw the garbage to the curb!" - }, { - "name" : "view.blocked_users", - "value" : "Manage Blocked Users" - }, { - "name" : "field.key", - "value" : "Username" - }, { - "name" : "field.enabled", - "value" : "Enforce Block" - }, { - "name" : "field.ctime", - "value" : "Created" - }, { - "name" : "action.enable", - "value" : "Enforce Block" - }, { - "name" : "action.disable", - "value" : "Disable Block" - }, { - "name" : "action.delete", - "value" : "Delete Block" - } ], - "shortId" : "aa88397b" - } ], - "AppSite" : [ { - "uuid" : "7569f7f0-6ad0-4709-9a77-c217e4fc7ccb", - "name" : "HackerNews", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "template" : true, - "enabled" : true, - "description" : "A blog and discussion site for technology news, operated by YCombinator", - "url" : "https://news.ycombinator.com", - "shortId" : "7569f7f0" - }, { - "uuid" : "76bb15ba-c184-43e4-99e6-989957e7cb62", - "name" : "MarginalRevolution", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "template" : true, - "enabled" : true, - "description" : "An economics blog by Tyler Cowen and Alex Tabarrok, professors at George Mason University", - "url" : "https://marginalrevolution.com", - "shortId" : "76bb15ba" - }, { - "uuid" : "e6adce40-8b78-44a7-b7f3-394fe6856de4", - "name" : "Reason", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "template" : true, - "enabled" : true, - "description" : "A leading libertarian magazine", - "url" : "https://reason.com", - "shortId" : "e6adce40" - }, { - "uuid" : "d78bbb36-75f0-4974-b3f3-b5cf93780582", - "name" : "Twitter", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "0a6b53b5-ef6a-4826-979d-7c0b1fce1ea2", - "template" : true, - "enabled" : true, - "description" : "what’s happening in the world and what people are talking about right now.", - "url" : "https://twitter.com", - "shortId" : "d78bbb36" - } ] - }, - "name" : "UserBlocker", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "url" : "https://getbubblenow.com/apps/UserBlocker", - "description" : "ShadowBan User Blocker", - "canPrime" : true, - "template" : true, - "enabled" : true, - "priority" : 300, - "dataConfig" : { - "presentation" : "site", - "dataDriver" : "bubble.app.social.block.UserBlockerAppDataDriver", - "fields" : [ { - "name" : "key", - "displayName" : "Key", - "mode" : "standard", - "control" : "text" - }, { - "name" : "enabled", - "displayName" : "Enabled", - "mode" : "standard", - "control" : "text" - }, { - "name" : "ctime", - "displayName" : "Ctime", - "mode" : "standard", - "control" : "text" - } ], - "actions" : [ { - "name" : "enable", - "when" : "!data.enabled" - }, { - "name" : "disable", - "when" : "data.enabled" - }, { - "name" : "delete" - } ], - "views" : [ { - "presentation" : "site", - "layout" : "table", - "name" : "blocked_users", - "priority" : 0 - } ], - "configFields" : [ { - "name" : "key", - "displayName" : "Key", - "mode" : "standard", - "control" : "text" - }, { - "name" : "enabled", - "displayName" : "Enabled", - "mode" : "standard", - "control" : "text" - }, { - "name" : "ctime", - "displayName" : "Ctime", - "mode" : "standard", - "control" : "text" - } ] - }, - "shortId" : "0a6b53b5" - }, { - "uuid" : "7af54a16-c7e9-4f80-b7ef-45353689ba9b", - "children" : { - "AppMatcher" : [ { - "uuid" : "f0e275af-e461-4d7e-932b-12fff0881a11", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "name" : "TlsPassthruMatcher", - "app" : "7af54a16-c7e9-4f80-b7ef-45353689ba9b", - "site" : "2793e94c-34c5-4ec2-a3d3-426518fc4a55", - "fqdn" : "*", - "urlRegex" : ".*", - "rule" : "a446487a-d841-468e-925b-e3435b2f2a50", - "template" : true, - "enabled" : true, - "connCheck" : true, - "requestCheck" : false, - "priority" : -1000000, - "shortId" : "f0e275af" - } ], - "AppRule" : [ { - "uuid" : "a446487a-d841-468e-925b-e3435b2f2a50", - "name" : "passthru", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "7af54a16-c7e9-4f80-b7ef-45353689ba9b", - "template" : true, - "enabled" : true, - "priority" : 0, - "driver" : "c487b2ba-65f7-462f-af7f-c1ca2af5bc8a", - "config" : { - "fqdnList" : [ ], - "feedList" : [ { - "feedUrl" : "https://raw.githubusercontent.com/getbubblenow/bubble-filter-lists/master/tls_passthru.txt" - } ] - }, - "shortId" : "a446487a" - } ], - "AppMessage" : [ { - "uuid" : "e3874ec0-e9c5-4ad5-a33d-3a489f58ed38", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "7af54a16-c7e9-4f80-b7ef-45353689ba9b", - "locale" : "en_US", - "priority" : 1, - "template" : true, - "enabled" : true, - "messages" : [ { - "name" : "name", - "value" : "DirectConnect" - }, { - "name" : "icon", - "value" : "classpath:models/apps/passthru/passthru-icon.svg" - }, { - "name" : "summary", - "value" : "Network Bypass" - }, { - "name" : "description", - "value" : "Do not perform SSL interception for certificate-pinned domains" - }, { - "name" : "config.view.manageDomains", - "value" : "Manage Bypass Domains" - }, { - "name" : "config.view.manageFeeds", - "value" : "Manage Bypass Domain Feeds" - }, { - "name" : "config.field.passthruFqdn", - "value" : "Domain" - }, { - "name" : "config.field.passthruFqdn.description", - "value" : "Bypass traffic interception for this hostname" - }, { - "name" : "config.field.feedName", - "value" : "Name" - }, { - "name" : "config.field.feedUrl", - "value" : "Bypass Domains List URL" - }, { - "name" : "config.field.feedUrl.description", - "value" : "URL returning a list of bypass domains and/or hostnames, one per line" - }, { - "name" : "config.action.addFqdn", - "value" : "Add New Bypass Domain" - }, { - "name" : "config.button.addFqdn", - "value" : "Add" - }, { - "name" : "config.action.removeFqdn", - "value" : "Remove" - }, { - "name" : "config.action.addFeed", - "value" : "Add New Bypass Domain Feed" - }, { - "name" : "config.button.addFeed", - "value" : "Add" - }, { - "name" : "config.action.removeFeed", - "value" : "Remove" - } ], - "shortId" : "e3874ec0" - } ], - "AppSite" : [ { - "uuid" : "2793e94c-34c5-4ec2-a3d3-426518fc4a55", - "name" : "All_Sites", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "app" : "7af54a16-c7e9-4f80-b7ef-45353689ba9b", - "template" : true, - "enabled" : true, - "description" : "All websites", - "url" : "*", - "shortId" : "2793e94c" - } ] - }, - "name" : "TlsPassthru", - "account" : "a4e4921a-0755-4b91-a858-7b4888b7433b", - "url" : "https://getbubblenow.com/apps/passthru", - "description" : "Do not perform SSL interception for certificate-pinned domains", - "canPrime" : false, - "template" : true, - "enabled" : true, - "priority" : 1000000, - "dataConfig" : { - "presentation" : "none", - "dataDriver" : "bubble.app.passthru.TlsPassthruAppDataDriver", - "configDriver" : "bubble.app.passthru.TlsPassthruAppConfigDriver", - "configFields" : [ { - "name" : "passthruFqdn", - "displayName" : "Passthru Fqdn", - "mode" : "standard", - "type" : "hostname", - "control" : "text", - "truncate" : false - }, { - "name" : "feedName", - "displayName" : "Feed Name", - "mode" : "standard", - "control" : "text", - "truncate" : false - }, { - "name" : "feedUrl", - "displayName" : "Feed Url", - "mode" : "standard", - "type" : "http_url", - "control" : "text" - } ], - "configViews" : [ { - "name" : "manageDomains", - "scope" : "app", - "root" : true, - "fields" : [ "passthruFqdn" ], - "actions" : [ { - "name" : "removeFqdn", - "scope" : "item", - "index" : 10 - }, { - "name" : "addFqdn", - "scope" : "app", - "index" : 10, - "params" : [ "passthruFqdn" ], - "button" : "addFqdn" - } ] - }, { - "name" : "manageFeeds", - "scope" : "app", - "root" : true, - "fields" : [ "feedName", "feedUrl" ], - "actions" : [ { - "name" : "removeFeed", - "scope" : "item", - "index" : 10 - }, { - "name" : "addFeed", - "scope" : "app", - "index" : 10, - "params" : [ "feedUrl" ], - "button" : "addFeed" - } ] - } ] - }, - "shortId" : "7af54a16" - } ] -} diff --git a/bubble-server/src/main/resources/db/migration/V2020091801__add_network_launch_type.sql b/bubble-server/src/main/resources/db/migration/V2020091801__add_network_launch_type.sql new file mode 100644 index 00000000..66806b60 --- /dev/null +++ b/bubble-server/src/main/resources/db/migration/V2020091801__add_network_launch_type.sql @@ -0,0 +1 @@ +ALTER TABLE bubble_network ADD COLUMN launch_type VARCHAR(200); diff --git a/bubble-server/src/main/resources/messages b/bubble-server/src/main/resources/messages index 61fc9667..9d1ecac6 160000 --- a/bubble-server/src/main/resources/messages +++ b/bubble-server/src/main/resources/messages @@ -1 +1 @@ -Subproject commit 61fc9667c4c66c0bcbbb8eb4d128e8ab58f50869 +Subproject commit 9d1ecac6514696721effe012e9c726896c368ebe diff --git a/bubble-server/src/main/resources/packer/roles/mitmproxy/files/bubble_api.py b/bubble-server/src/main/resources/packer/roles/mitmproxy/files/bubble_api.py index 47f88908..a42661df 100644 --- a/bubble-server/src/main/resources/packer/roles/mitmproxy/files/bubble_api.py +++ b/bubble-server/src/main/resources/packer/roles/mitmproxy/files/bubble_api.py @@ -25,7 +25,6 @@ from bubble_config import bubble_port, debug_capture_fqdn, \ from mitmproxy import http from mitmproxy.net.http import headers as nheaders from mitmproxy.proxy.protocol.async_stream_body import AsyncStreamBody -from mitmproxy.proxy.protocol.request_capture import RequestCapture bubble_log = logging.getLogger(__name__) @@ -401,7 +400,7 @@ def is_bubble_health_check(path): def is_sage_request(ip, fqdns): - return (ip == bubble_sage_ip4 or ip == bubble_sage_ip6) and bubble_sage_host in fqdns + return fqdns is not None and (ip == bubble_sage_ip4 or ip == bubble_sage_ip6) and bubble_sage_host in fqdns def is_not_from_vpn(client_addr): @@ -416,7 +415,7 @@ def is_flex_domain(client_addr, server_addr, fqdns): return False fqdn = fqdns[0] - if fqdn == bubble_host or fqdn == bubble_host_alias or fqdn == bubble_sage_host: + if fqdn == bubble_host or fqdn == bubble_host_alias or (bubble_sage_host is not None and fqdn == bubble_sage_host): if bubble_log.isEnabledFor(DEBUG): bubble_log.debug('is_flex_domain: (early) returning False for: '+fqdn) return False diff --git a/bubble-web b/bubble-web index 66d46695..37dd89bd 160000 --- a/bubble-web +++ b/bubble-web @@ -1 +1 @@ -Subproject commit 66d46695a64ff58934560c4b35aa43a0ab32fbe2 +Subproject commit 37dd89bd78949a63c68a64596b4e1c105809a577 diff --git a/utils/cobbzilla-utils b/utils/cobbzilla-utils index dfafe62c..fab2bdaf 160000 --- a/utils/cobbzilla-utils +++ b/utils/cobbzilla-utils @@ -1 +1 @@ -Subproject commit dfafe62c7eb3413cf1210e40e551094458f4d9d0 +Subproject commit fab2bdafe756fc53ff80b58171fb9000846bf0ef From f72bc613e452b2eaba13b405560366578cd54784 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Fri, 18 Sep 2020 11:37:58 -0400 Subject: [PATCH 03/20] fix npe in isSageLauncher --- .../src/main/java/bubble/server/BubbleConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bubble-server/src/main/java/bubble/server/BubbleConfiguration.java b/bubble-server/src/main/java/bubble/server/BubbleConfiguration.java index 6123a988..e14067cb 100644 --- a/bubble-server/src/main/java/bubble/server/BubbleConfiguration.java +++ b/bubble-server/src/main/java/bubble/server/BubbleConfiguration.java @@ -144,7 +144,7 @@ public class BubbleConfiguration extends PgRestServerConfiguration } @JsonIgnore @Transient public boolean isSageLauncher() { final BubbleNetwork thisNetwork = getThisNetwork(); - return (isSelfSage() || !hasSageNode()) && thisNetwork.sage(); + return (isSelfSage() || !hasSageNode()) && (thisNetwork == null || thisNetwork.sage()); } @JsonIgnore @Transient public boolean isSage() { From 07afb14a34c875dbfcfce7901a8af7a6ec6b3ed7 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Fri, 18 Sep 2020 11:45:25 -0400 Subject: [PATCH 04/20] root network is a sage --- .../src/main/java/bubble/service/boot/ActivationService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/bubble-server/src/main/java/bubble/service/boot/ActivationService.java b/bubble-server/src/main/java/bubble/service/boot/ActivationService.java index 57fbb069..5aed972d 100644 --- a/bubble-server/src/main/java/bubble/service/boot/ActivationService.java +++ b/bubble-server/src/main/java/bubble/service/boot/ActivationService.java @@ -168,6 +168,7 @@ public class ActivationService { .setDomain(domain.getUuid()) .setDomainName(domain.getName()) .setComputeSizeType(ComputeNodeSizeType.local) + .setInstallType(AnsibleInstallType.sage) .setName(request.getNetworkName()) .setTag(TAG_ALLOW_REGISTRATION, true) .setTag(TAG_PARENT_ACCOUNT, account.getUuid()) From d38e088bb1452edda0f6f95c60f9560557ffe781 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Fri, 18 Sep 2020 12:04:45 -0400 Subject: [PATCH 05/20] set launchType on root network --- .../src/main/java/bubble/service/boot/ActivationService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/bubble-server/src/main/java/bubble/service/boot/ActivationService.java b/bubble-server/src/main/java/bubble/service/boot/ActivationService.java index 5aed972d..571126a6 100644 --- a/bubble-server/src/main/java/bubble/service/boot/ActivationService.java +++ b/bubble-server/src/main/java/bubble/service/boot/ActivationService.java @@ -169,6 +169,7 @@ public class ActivationService { .setDomainName(domain.getName()) .setComputeSizeType(ComputeNodeSizeType.local) .setInstallType(AnsibleInstallType.sage) + .setLaunchType(LaunchType.fork_sage) .setName(request.getNetworkName()) .setTag(TAG_ALLOW_REGISTRATION, true) .setTag(TAG_PARENT_ACCOUNT, account.getUuid()) From b6a48f36716dba99eff6258bf9c5abc30789056b Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Fri, 18 Sep 2020 12:10:56 -0400 Subject: [PATCH 06/20] fix to ensure root network is sage --- .../src/main/java/bubble/dao/cloud/BubbleNetworkDAO.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/bubble-server/src/main/java/bubble/dao/cloud/BubbleNetworkDAO.java b/bubble-server/src/main/java/bubble/dao/cloud/BubbleNetworkDAO.java index e9e9d554..beb5e51b 100644 --- a/bubble-server/src/main/java/bubble/dao/cloud/BubbleNetworkDAO.java +++ b/bubble-server/src/main/java/bubble/dao/cloud/BubbleNetworkDAO.java @@ -7,6 +7,7 @@ package bubble.dao.cloud; import bubble.dao.account.AccountDAO; import bubble.dao.account.AccountOwnedEntityDAO; import bubble.dao.bill.AccountPlanDAO; +import bubble.model.account.Account; import bubble.model.bill.AccountPlan; import bubble.model.cloud.*; import bubble.server.BubbleConfiguration; @@ -24,6 +25,7 @@ import java.util.stream.Collectors; import static bubble.model.cloud.BubbleNetwork.validateHostname; import static bubble.server.BubbleConfiguration.getDEFAULT_LOCALE; import static org.cobbzilla.wizard.model.Identifiable.UUID; +import static org.cobbzilla.wizard.resources.ResourceUtil.forbiddenEx; import static org.cobbzilla.wizard.resources.ResourceUtil.invalidEx; @Repository @Slf4j @@ -46,9 +48,14 @@ public class BubbleNetworkDAO extends AccountOwnedEntityDAO { if (errors.hasSuggestedName()) network.setName(errors.getSuggestedName()); } if (!network.hasNickname()) network.setNickname(network.getName()); - final AnsibleInstallType installType = network.hasForkHost() && network.getLaunchType() == LaunchType.fork_sage && configuration.isSageLauncher() + final AnsibleInstallType installType = network.getLaunchType() == LaunchType.fork_sage && configuration.isSageLauncher() ? AnsibleInstallType.sage : AnsibleInstallType.node; + if (installType == AnsibleInstallType.sage) { + // ensure caller is an admin + final Account account = accountDAO.findByUuid(network.getAccount()); + if (!account.admin()) throw forbiddenEx(); + } network.setInstallType(installType); network.setSslPort(installType == AnsibleInstallType.sage ? 443 : configuration.getDefaultSslPort()); if (!network.hasLocale()) network.setLocale(getDEFAULT_LOCALE()); From c2be135946abf8f3a5dc3dc682eab03b566491ab Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Fri, 18 Sep 2020 12:32:50 -0400 Subject: [PATCH 07/20] update docs, create dist symlinks --- README.md | 38 ++++++++++++++++----------------- bin/build_dist | 1 + docs/dev.md | 8 +++++++ docs/launch-node-from-local.md | 32 +++++++++++++++++++++++++++ docs/launch-node-from-remote.md | 35 ++++++++++++++++++++++++++++++ docs/launch-node.md | 36 ++++++++----------------------- docs/local-launcher.md | 12 ++++++----- docs/remote-launcher.md | 15 ++++++++++--- utils/cobbzilla-utils | 2 +- 9 files changed, 123 insertions(+), 56 deletions(-) create mode 100644 docs/launch-node-from-local.md create mode 100644 docs/launch-node-from-remote.md diff --git a/README.md b/README.md index 7701573a..76d64137 100644 --- a/README.md +++ b/README.md @@ -28,16 +28,23 @@ you can probably figure out how to get things working. If you're running Mac OS more difficult. ### Download a Bubble Distribution -Download and unzip the latest Bubble release: - * [ZIP file](https://git.bubblev.org/bubblev/bubble/archive/release/adventure.zip) - * [tar.gz archive](https://git.bubblev.org/bubblev/bubble/archive/release/adventure.tar.gz) +Download the [latest Bubble release](https://jenkins.bubblev.org/public/releases/bubble/latest/bubble.zip) -Unzip or untar the archive that you downloaded. +Open a command-line terminal. + +Unzip the file that you downloaded: + + unzip bubble.zip + +Change directories into the directory containing the files that were unzipped: + + cd bubble-Adventure_1.x.x # replace `Adventure_1.x.x` with the version that you downloaded ### Install System Software -You'll need to install some software for Bubble to work correctly. +You'll need to install some software for Bubble to work correctly. Run: + + ./bin/first_time_ubuntu.sh -Run the `bin/first_time_ubuntu.sh` command. This will grab all the submodules and perform an initial build of all components. You only need to run this command once, ever, on a given system. @@ -51,23 +58,14 @@ distributions should work fine. If you are running a different OS or distributio And then edit it such that all the same packages get installed. Then submit a pull request and we can add support for your operating system to the main repository. -### Build -Before running Bubble, you need to build it. Run: - - ./bin/first_time_setup.sh - -This will grab all the submodules and perform an initial build of all components. - -This will take a while to complete, please be patient. - ## Deployment Modes -Bubble runs in three different modes. -In order to launch and use your own Bubble that you can connect devices to and use, -you will progress through each of these modes. +Bubble runs in three different modes. You'll at least need to run a Local Launcher first, then +decide if you want to use a Remote Launcher to manage multiple Bubble nodes, or just launch a single Bubble +directly from the Local Launcher. #### Local Launcher Mode In this mode, Bubble runs locally on your machine. You'll setup the various cloud services required to run Bubble, -and use the Local Launcher to fork a Remote Launcher. +and use the Local Launcher to start a Remote Launcher or a Bubble Node. Learn more about setting up [Local Launcher Mode](docs/local-launcher.md) @@ -78,7 +76,7 @@ You cannot connect devices to a Bubble in Launcher Mode, you can only use it to Learn more about setting up [Remote Launcher Mode](docs/remote-launcher.md) #### Bubble Node Mode -In this mode, the Bubble has been launched by a Remote Launcher and is a proper Bubble Node. +In this mode, the Bubble has been launched by a Local Launcher or a Remote Launcher and is a proper Bubble Node. You can connect your devices to it and use it as your own private VPN and enhanced internet service. Learn more about launching a [Bubble Node](docs/launch-node.md) diff --git a/bin/build_dist b/bin/build_dist index db65f5da..70d0c238 100755 --- a/bin/build_dist +++ b/bin/build_dist @@ -78,6 +78,7 @@ if [[ ! -z "${BUBBLE_DIST_HOME}" ]] ; then if [[ ${IS_DEV} -eq 0 ]] ; then cd ${BUBBLE_DIST_TOP} && rm -f latest && ln -sf ${BUBBLE_VERSION} latest echo "${BUBBLE_VERSION}" > latest.txt + cd ${BUBBLE_DIST_DIR} && ln -s "$(basename ${BUBBLE_DIST})" bubble.zip && ln -s "$(basename ${BUBBLE_DIST}).sha" bubble.zip.sha256 fi echo "Published release: ${BUBBLE_DIST}" fi diff --git a/docs/dev.md b/docs/dev.md index 5c0cdc22..8af03df0 100644 --- a/docs/dev.md +++ b/docs/dev.md @@ -5,11 +5,19 @@ Bubble Developer Guide These instructions presume you are running a newly setup Ubuntu 20.04 system. Either the Ubuntu Server or Desktop distribution will work. +Other Debian-based systems will probably also work fine. + +See below for other Linux distributions and other operating systems. + ## First-Time System Setup +You'll need to install some software for Bubble to work correctly. + After you clone this repository, run: ./bin/first_time_ubuntu.sh +This runs some `apt` commands to install various bits of software needed to run Bubble. + If you are running on a non-Ubuntu system, copy that file to something like: ./bin/first_time_myoperatingsystem.sh diff --git a/docs/launch-node-from-local.md b/docs/launch-node-from-local.md new file mode 100644 index 00000000..2b67bfc5 --- /dev/null +++ b/docs/launch-node-from-local.md @@ -0,0 +1,32 @@ +# Launching a Bubble from a Local Launcher +These instructions assume you have already set up a [Local Launcher](local-launcher.md). + +## Login +Login to your Local Launcher using the root admin account that was created during activation. + +Because the login field must be an email address, use the special email address `root@local.local` to login +with the admin account. + +## Launch Bubble +You should see a "Launch Bubble" screen. + +In the "Bubble Type" drop-down, choose "Fork Bubble" + +Choose your configuration options, then click the "Launch Your Bubble!" button kick things off. + +The screen will refresh and show a progress meter. A typical launch will take about 10 minutes. + +## Your Very First Bubble +The very first Bubble you launch will build a [Packer](https://packer.io) image that will be used for this and +subsequent launches. + +This process adds about 20-25 minutes to the launch process. This only happens the first time you launch a Bubble. +Later launches can skip this step, because Bubble will detect that the packer image already exists. + +## Install Bubble Apps +While your Bubble is launching, take a moment to +[install the Bubble Native app](https://support.getbubblenow.com/hc/en-us/articles/360050801634-Connect-a-device-to-your-Bubble) +on each device you plan on connecting to your Bubble. + +When your Bubble finishes launching, it will show a "Connect to Bubble" button. Click this and you'll be connected +to your Bubble Node. diff --git a/docs/launch-node-from-remote.md b/docs/launch-node-from-remote.md new file mode 100644 index 00000000..fea1860b --- /dev/null +++ b/docs/launch-node-from-remote.md @@ -0,0 +1,35 @@ +# Launching a Bubble from a Remote Launcher +These instructions assume you have already set up a [Remote Launcher](remote-launcher.md). + +## Create a user +Click the "Sign Up" button in the header to create a new user account. + +Note: You *could* sign in using the root account and launch a Bubble from there, but this is discouraged for security reasons. +It is *highly recommended* to launch new Bubbles using a regular user account, and not your Remote Launcher root account. +You should use the root account on the Remote Launcher only to manage the system itself. + +## Verify user +After you create a user, the Remote Launcher will send an email with a verification link. +Click the link in the email to verify your new account. + +## Launch Bubble +After you click the verification link, you should see a "Launch Bubble" screen. + +Choose your configuration options, then click the "Launch Your Bubble!" button kick things off. + +The screen will refresh and show a progress meter. A typical launch will take about 10 minutes. + +## Your Very First Bubble +The very first Bubble you launch will build a [Packer](https://packer.io) image that will be used for this and +subsequent launches. + +This process adds about 20-25 minutes to the launch process. This only happens the first time you launch a Bubble. +Later launches can skip this step, because Bubble will detect that the packer image already exists. + +## Install Bubble Apps +While your Bubble is launching, take a moment to +[install the Bubble Native app](https://support.getbubblenow.com/hc/en-us/articles/360050801634-Connect-a-device-to-your-Bubble) +on each device you plan on connecting to your Bubble. + +When your Bubble finishes launching, it will show a "Connect to Bubble" button. Click this and you'll be connected +to your Bubble Node. diff --git a/docs/launch-node.md b/docs/launch-node.md index 77c44c88..439e3db5 100644 --- a/docs/launch-node.md +++ b/docs/launch-node.md @@ -2,35 +2,17 @@ A Bubble in Node Mode is a proper Bubble that allows you to connect your devices to it, and manages network traffic on behalf of those devices. -Launching a Bubble in Node Mode requires a Bubble in Remote Launcher Mode. If you don't have -a Bubble in Remote Launcher Mode, go back and follow the [Remote Launcher Mode instructions](remote-launcher.md). +Launching a Bubble in Node Mode requires a Bubble in Local or Remote Launcher Mode. If you don't have +a Bubble in Local or Remote Launcher Mode, go back and follow the [Local Launcher Mode instructions](local-launcher.md) +and/or the [Remote Launcher Mode instructions](remote-launcher.md). -## Create a user -Load your Remote Launcher's home page in a web browser. +Load your Launcher's home page in a web browser. -Click the "Sign Up" button in the header to create a new user account. +## From a Remote Launcher +If you're launching from a [Remote Launcher](remote-launcher.md), follow [these instructions](launch-node-from-remote.md) -Note: You *could* sign in using the root account and launch a Bubble from there, but this is discouraged for security reasons. -It is *highly recommended* to launch new Bubbles using a regular user account, and not your Remote Launcher root account. -You should use the root account on the Remote Launcher only to manage the system itself. - -## Verify user -After you create a user, the Remote Launcher will send an email with a verification link. -Click the link in the email to verify your new account. - -## Launch Bubble -After you click the verification link, you should see a "Launch Bubble" screen. - -Choose your configuration options, then click the "Launch Your Bubble!" button kick things off. - -The screen will refresh and show a progress meter. - -While your Bubble is launching, take a moment to -[install the Bubble Native app](https://support.getbubblenow.com/hc/en-us/articles/360050801634-Connect-a-device-to-your-Bubble) -on each device you plan on connecting to your Bubble. - -When your Bubble finishes launching, it will show a "Connect to Bubble" button. Click this and you'll be connected -to your Bubble Node. +## From a Local Launcher +If you're launching from a [Local Launcher](local-launcher.md), follow [these instructions](launch-node-from-local.md) ## Connect Devices [Install the Bubble Native app](https://support.getbubblenow.com/hc/en-us/articles/360050801634-Connect-a-device-to-your-Bubble) @@ -38,7 +20,7 @@ on each device you plan on connecting to your Bubble. Start the app. At the bottom of the login screen, you should see "Running your own Bubble? Set Launcher". -Click or tap "Set Launcher" and enter the hostname of your Remote Launcher. +Click or tap "Set Launcher" and enter the hostname of your new Bubble Node. Then fill out the "Email" and "Password" fields, and click or tap the "Sign In" button. Your Bubble should automatically connect and configure the device. If it does not, click or tap the "Connect" button. diff --git a/docs/local-launcher.md b/docs/local-launcher.md index df7f7e60..53035e89 100644 --- a/docs/local-launcher.md +++ b/docs/local-launcher.md @@ -3,23 +3,23 @@ A Bubble in Local Launcher Mode is the starting point for standing up a Bubble i [Remote Launcher Mode](remote-launcher.md), which you can then use to launch proper Bubbles in [Bubble Node Mode](launch-node.md). -### Run Bubble +## Run Bubble Run the `./bin/run.sh` script on your local machine to start Bubble in Local Launcher mode. Once the server is running, it will try to open a browser window to continue configuration. It will also print out the URL, so if the browser doesn't start correctly, you can paste this into your browser's location bar. -### Activation +## Activation Your Bubble is running locally in a "blank" mode. It needs an initial "root" account and some basic services configured. In order to activate your Local Launcher, you'll need accounts and/or API keys from several cloud providers. Have these account credentials handy. Be prepared to sign up for new accounts where needed. -#### Activate via Web UI +### Activate via Web UI The browser-based admin UI should be displaying an "Activate" page. Complete the information on this page and submit the data. The Bubble Launcher will create an initial "root" account and other basic system configurations. -#### Activate via command line +### Activate via command line Make a copy of the file `config/activation.json` and edit the copy. There are comments in the file to guide you. To activate your Local Launcher Bubble, run this command: @@ -30,4 +30,6 @@ After running the above, refresh the web page that opened when the server starte You can now login as the admin user using the email address `root@local.local` and the password from your `activation.json` file. -You are now read to Launch Bubble in [Remote Launcher Mode](remote-launcher.md) +## Next Steps +You are now read to launch a new Bubble in [Bubble Mode](launch-node.md), or +a Remote Launcher via [Remote Launcher Mode](remote-launcher.md) diff --git a/docs/remote-launcher.md b/docs/remote-launcher.md index 9abe7b4b..02540f4c 100644 --- a/docs/remote-launcher.md +++ b/docs/remote-launcher.md @@ -15,7 +15,7 @@ address `root@local.local` and the password from your `activation.json` file. After you log in, you should see a "Launch Bubble" screen. If you don't see this screen, click the "My Bubble" link in the header. -In the "Bubble Type" drop-down box, choose "Fork". +In the "Bubble Type" drop-down box, choose "Fork Launcher". In the "Fork Host" field, enter the fully-qualified domain name (FQDN) that the Bubble will be known as. @@ -26,8 +26,17 @@ In the "Domain" field, choose the domain that corresponds to the FQDN you entere Configure the remaining fields as you desire. When you're ready, click the "Launch Your Bubble!" button. -The screen will refresh and show a progress meter. +The screen will refresh and show a progress meter. A typical launch will take about 10 minutes. + +## Your Very Remote Launcher +The very first Remote Launcher you launch will build a [Packer](https://packer.io) image that will be used for this and +subsequent launches. + +This process adds about 20-25 minutes to the launch process. This only happens the first time you launch a Remote Launcher. +Later launches can skip this step, because Bubble will detect that the packer image already exists. + +## Next Steps When your Bubble finishes launching, it will show a "Connect to Bubble" button. Click this and you'll be connected to your Remote Launcher. -You are now ready to [Launch a Bubble](launch-node.md) +You are now ready to [Launch a Bubble](launch-node.md) from the Remote Launcher diff --git a/utils/cobbzilla-utils b/utils/cobbzilla-utils index fab2bdaf..0de14792 160000 --- a/utils/cobbzilla-utils +++ b/utils/cobbzilla-utils @@ -1 +1 @@ -Subproject commit fab2bdafe756fc53ff80b58171fb9000846bf0ef +Subproject commit 0de14792b3041723e1c506653b4ef90883849552 From 0ac2ba6a410951cb91832878270864804e4fd6a3 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Fri, 18 Sep 2020 12:38:05 -0400 Subject: [PATCH 08/20] add note about progress meter during packer build --- docs/launch-node-from-local.md | 7 ++++++- docs/launch-node-from-remote.md | 7 ++++++- docs/remote-launcher.md | 7 ++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/docs/launch-node-from-local.md b/docs/launch-node-from-local.md index 2b67bfc5..0c1e2cfa 100644 --- a/docs/launch-node-from-local.md +++ b/docs/launch-node-from-local.md @@ -20,7 +20,12 @@ The screen will refresh and show a progress meter. A typical launch will take ab The very first Bubble you launch will build a [Packer](https://packer.io) image that will be used for this and subsequent launches. -This process adds about 20-25 minutes to the launch process. This only happens the first time you launch a Bubble. +This process adds about 20-25 minutes to the launch process. + +While the packer image is building, the progress meter will appear to be "stuck" at 1%. This is normal. +If you're curious, you can observe the packer image being built in your Bubble logs. + +This only happens the first time you launch a Bubble. Later launches can skip this step, because Bubble will detect that the packer image already exists. ## Install Bubble Apps diff --git a/docs/launch-node-from-remote.md b/docs/launch-node-from-remote.md index fea1860b..82f522b9 100644 --- a/docs/launch-node-from-remote.md +++ b/docs/launch-node-from-remote.md @@ -23,7 +23,12 @@ The screen will refresh and show a progress meter. A typical launch will take ab The very first Bubble you launch will build a [Packer](https://packer.io) image that will be used for this and subsequent launches. -This process adds about 20-25 minutes to the launch process. This only happens the first time you launch a Bubble. +This process adds about 20-25 minutes to the launch process. + +While the packer image is building, the progress meter will appear to be "stuck" at 1%. This is normal. +If you're curious, you can observe the packer image being built in your Bubble logs. + +This only happens the first time you launch a Bubble. Later launches can skip this step, because Bubble will detect that the packer image already exists. ## Install Bubble Apps diff --git a/docs/remote-launcher.md b/docs/remote-launcher.md index 02540f4c..01838164 100644 --- a/docs/remote-launcher.md +++ b/docs/remote-launcher.md @@ -32,7 +32,12 @@ The screen will refresh and show a progress meter. A typical launch will take ab The very first Remote Launcher you launch will build a [Packer](https://packer.io) image that will be used for this and subsequent launches. -This process adds about 20-25 minutes to the launch process. This only happens the first time you launch a Remote Launcher. +This process adds about 20-25 minutes to the launch process. + +While the packer image is building, the progress meter will appear to be "stuck" at 1%. This is normal. +If you're curious, you can observe the packer image being built in your Bubble logs. + +This only happens the first time you launch a Remote Launcher. Later launches can skip this step, because Bubble will detect that the packer image already exists. ## Next Steps From 8a07bb931c78ea111adf4c72629885f1f078839a Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Fri, 18 Sep 2020 12:57:41 -0400 Subject: [PATCH 09/20] checks to see if we should run upgrade service --- .../NotificationHandler_hello_from_sage.java | 2 +- .../listener/BubbleFirstTimeListener.java | 2 +- .../service/upgrade/AppUpgradeService.java | 29 +++++++++++++++++-- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/bubble-server/src/main/java/bubble/notify/NotificationHandler_hello_from_sage.java b/bubble-server/src/main/java/bubble/notify/NotificationHandler_hello_from_sage.java index b0733f07..a229d906 100644 --- a/bubble-server/src/main/java/bubble/notify/NotificationHandler_hello_from_sage.java +++ b/bubble-server/src/main/java/bubble/notify/NotificationHandler_hello_from_sage.java @@ -47,7 +47,7 @@ public class NotificationHandler_hello_from_sage extends ReceivedNotificationHan configuration.setSageVersion(payloadNode.getSageVersion()); // start the app upgrade service, if not running - if (!appUpgradeService.getIsAlive()) appUpgradeService.start(); + if (!appUpgradeService.getIsAlive() && appUpgradeService.shouldRun()) appUpgradeService.start(); } final BubbleNode thisNode = configuration.getThisNode(); diff --git a/bubble-server/src/main/java/bubble/server/listener/BubbleFirstTimeListener.java b/bubble-server/src/main/java/bubble/server/listener/BubbleFirstTimeListener.java index 3082c1f3..f6dfbbaa 100644 --- a/bubble-server/src/main/java/bubble/server/listener/BubbleFirstTimeListener.java +++ b/bubble-server/src/main/java/bubble/server/listener/BubbleFirstTimeListener.java @@ -43,7 +43,7 @@ public class BubbleFirstTimeListener extends RestServerLifecycleListenerBase redis = new AtomicReference<>(); + private static final AtomicReference redis = new AtomicReference<>(); public static String getUnlockKey () { final RedisService r = redis.get(); return r == null ? null : r.get(UNLOCK_KEY); diff --git a/bubble-server/src/main/java/bubble/service/upgrade/AppUpgradeService.java b/bubble-server/src/main/java/bubble/service/upgrade/AppUpgradeService.java index 33ba3d0c..f1bd15b6 100644 --- a/bubble-server/src/main/java/bubble/service/upgrade/AppUpgradeService.java +++ b/bubble-server/src/main/java/bubble/service/upgrade/AppUpgradeService.java @@ -50,24 +50,49 @@ public class AppUpgradeService extends SimpleDaemon { @Autowired private RuleDriverDAO driverDAO; @Autowired private StandardRuleEngineService ruleEngine; + public boolean shouldRun () { + final BubbleNetwork thisNetwork = configuration.getThisNetwork(); + if (thisNetwork == null) { + log.warn("shouldRun: thisNetwork is null, not running"); + return false; + } + final BubbleNode thisNode = configuration.getThisNode(); + if (thisNode == null) { + log.warn("shouldRun: thisNode is null, not running"); + return false; + } + final BubbleNode sageNode = configuration.getSageNode(); + if (sageNode == null) { + log.warn("shouldRun: sageNode is null, not running"); + return false; + } + if (sageNode.getUuid().equals(thisNode.getUuid())) { + log.warn("shouldRun: sageNode is thisNode, not running"); + return false; + } + return true; + } + @Override protected void process() { final BubbleNetwork thisNetwork = configuration.getThisNetwork(); if (thisNetwork == null) { log.warn("process: thisNetwork is null, not running"); return; } - final BubbleNode thisNode = configuration.getThisNode(); if (thisNode == null) { log.warn("process: thisNode is null, not running"); return; } - final BubbleNode sageNode = configuration.getSageNode(); if (sageNode == null) { log.warn("process: sageNode is null, not running"); return; } + if (sageNode.getUuid().equals(thisNode.getUuid())) { + log.warn("process: sageNode is thisNode, not running"); + return; + } // excluding sage, are we the oldest running node? final List nodes = nodeDAO.findRunningByNetwork(thisNetwork.getUuid()).stream() From a5f8191418075c4f58c85ba1c2b12a050122772b Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Fri, 18 Sep 2020 13:01:35 -0400 Subject: [PATCH 10/20] update utils --- utils/cobbzilla-utils | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/cobbzilla-utils b/utils/cobbzilla-utils index 0de14792..1cfe96e5 160000 --- a/utils/cobbzilla-utils +++ b/utils/cobbzilla-utils @@ -1 +1 @@ -Subproject commit 0de14792b3041723e1c506653b4ef90883849552 +Subproject commit 1cfe96e59ca2c98955a379e539183a5596dab33f From 8d21047740b547edec292158726097b02cd9868a Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Sat, 19 Sep 2020 04:13:58 -0400 Subject: [PATCH 11/20] add full reset script and instructions --- bin/reset_bubble_full | 49 +++++++++++++++++++ .../src/main/java/bubble/ApiConstants.java | 1 + .../dao/account/AccountOwnedEntityDAO.java | 3 +- docs/dev.md | 9 ++++ docs/local-launcher.md | 11 ++++- 5 files changed, 71 insertions(+), 2 deletions(-) create mode 100755 bin/reset_bubble_full diff --git a/bin/reset_bubble_full b/bin/reset_bubble_full new file mode 100755 index 00000000..4e95a13a --- /dev/null +++ b/bin/reset_bubble_full @@ -0,0 +1,49 @@ +#!/bin/bash +# +# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ +# +# +# Perform a full reset of Bubble. Removes the database and all locally stored files +# +# Usage: reset_bubble_full +# +SCRIPT="${0}" +SCRIPT_DIR=$(cd $(dirname ${SCRIPT}) && pwd) +. ${SCRIPT_DIR}/bubble_common + +SELF_NODE_JSON="${HOME}/self_node.json" +BUBBLE_VERSIONS_FILE="${HOME}/bubble_versions.properties" + +BUBBLE_LOCAL_STORAGE_DIR_DEFAULT=".bubble_local_storage" +BUBBLE_LOCAL_STORAGE_DIR=$(${SCRIPT_DIR}/bin/bconst bubble.cloud.storage.local.LocalStorageDriver.BUBBLE_LOCAL_STORAGE_DIR) +if [[ -z ${BUBBLE_LOCAL_STORAGE_DIR} ]] ; then + echo "Error determining Bubble LocalStorage directory, using default: ${BUBBLE_LOCAL_STORAGE_DIR_DEFAULT}" + BUBBLE_LOCAL_STORAGE_DIR=${BUBBLE_LOCAL_STORAGE_DIR_DEFAULT} +fi +BUBBLE_LOCAL_STORAGE_DIR="${HOME}/${BUBBLE_LOCAL_STORAGE_DIR}" + +BUBBLE_CLOUD_DATA_DIR_DEFAULT="bubble_cloudServiceData" +BUBBLE_CLOUD_DATA_DIR=$(${SCRIPT_DIR}/bin/bconst bubble.ApiConstants.BUBBLE_CLOUD_SERVICE_DATA) +if [[ -z ${BUBBLE_CLOUD_DATA_DIR} ]] ; then + echo "Error determining Bubble Cloud Service Data directory, using default: " + BUBBLE_CLOUD_DATA_DIR=${BUBBLE_CLOUD_DATA_DIR_DEFAULT} +fi +BUBBLE_CLOUD_DATA_DIR="${HOME}/${BUBBLE_CLOUD_DATA_DIR}" + + +rm -f ${SELF_NODE_JSON} || die "Error removing ${SELF_NODE_JSON}" +echo "> removed: ${SELF_NODE_JSON}" + +rm -f ${BUBBLE_VERSIONS_FILE} || die "Error removing ${BUBBLE_VERSIONS_FILE}" +echo "> removed: ${BUBBLE_VERSIONS_FILE}" + +rm -rf ${BUBBLE_LOCAL_STORAGE_DIR} || die "Error removing ${BUBBLE_LOCAL_STORAGE_DIR}" +echo "> removed: ${BUBBLE_LOCAL_STORAGE_DIR}" + +rm -rf ${BUBBLE_CLOUD_DATA_DIR} || die "Error removing ${BUBBLE_CLOUD_DATA_DIR}" +echo "> removed: ${BUBBLE_CLOUD_DATA_DIR}" + +dropdb bubble || die "Error dropping bubble database" +echo "> dropped database: bubble" + +echo "+++ Bubble Reset Complete" diff --git a/bubble-server/src/main/java/bubble/ApiConstants.java b/bubble-server/src/main/java/bubble/ApiConstants.java index 379f2d14..99e95f70 100644 --- a/bubble-server/src/main/java/bubble/ApiConstants.java +++ b/bubble-server/src/main/java/bubble/ApiConstants.java @@ -127,6 +127,7 @@ public class ApiConstants { } } + public static final String BUBBLE_CLOUD_SERVICE_DATA = "bubble_cloudServiceData"; public static final File CACERTS_DIR = new File(HOME_DIR, "cacerts"); public static final File MITMPROXY_CERT_DIR = new File(HOME_DIR, "mitm_certs"); diff --git a/bubble-server/src/main/java/bubble/dao/account/AccountOwnedEntityDAO.java b/bubble-server/src/main/java/bubble/dao/account/AccountOwnedEntityDAO.java index 84d69d1e..d85b8042 100644 --- a/bubble-server/src/main/java/bubble/dao/account/AccountOwnedEntityDAO.java +++ b/bubble-server/src/main/java/bubble/dao/account/AccountOwnedEntityDAO.java @@ -20,6 +20,7 @@ import java.io.File; import java.util.Collection; import java.util.List; +import static bubble.ApiConstants.BUBBLE_CLOUD_SERVICE_DATA; import static bubble.ApiConstants.HOME_DIR; import static org.cobbzilla.util.reflect.ReflectionUtil.getFirstTypeParam; import static org.cobbzilla.util.security.ShaUtil.sha256_hex; @@ -79,7 +80,7 @@ public abstract class AccountOwnedEntityDAO pathMiddle = cloudServiceUuid; } return new File(HOME_DIR + File.separator - + "bubble_cloudServiceData" + File.separator + + BUBBLE_CLOUD_SERVICE_DATA + File.separator + pathMiddle + File.separator + sha.substring(0, 2) + File.separator + sha.substring(2, 4) + File.separator diff --git a/docs/dev.md b/docs/dev.md index 8af03df0..76890579 100644 --- a/docs/dev.md +++ b/docs/dev.md @@ -59,3 +59,12 @@ This will update and rebuild all submodules, and the main bubble jar file. ## Running in development Run the `bin/run.sh` script to start the Bubble server. + +## Resetting everything +If you want to "start over", run: + + ./bin/reset_bubble_full + +This will remove local files stored by Bubble, and drop the bubble database. + +If you run `./bin/run.sh` again, it will be like running it for the first time. diff --git a/docs/local-launcher.md b/docs/local-launcher.md index 53035e89..8f1aa0dc 100644 --- a/docs/local-launcher.md +++ b/docs/local-launcher.md @@ -24,12 +24,21 @@ Make a copy of the file `config/activation.json` and edit the copy. There are co To activate your Local Launcher Bubble, run this command: - `./bin/bactivate /path/to/activation.json` + ./bin/bactivate /path/to/activation.json After running the above, refresh the web page that opened when the server started. You should see a login page. You can now login as the admin user using the email address `root@local.local` and the password from your `activation.json` file. +### Resetting everything +If you want to "start over", run: + + ./bin/reset_bubble_full + +This will remove local files stored by Bubble, and drop the bubble database. + +If you run `./bin/run.sh` again, it will be like running it for the first time. + ## Next Steps You are now read to launch a new Bubble in [Bubble Mode](launch-node.md), or a Remote Launcher via [Remote Launcher Mode](remote-launcher.md) From 5c04f6b50b17185efd9fc5ceb13bc95be438f31d Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Sat, 19 Sep 2020 05:52:06 -0400 Subject: [PATCH 12/20] ensure whitelist domains are not included with reject/block domains --- .../java/bubble/service/stream/StandardAppPrimerService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java b/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java index 85a52a3b..89439164 100644 --- a/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java +++ b/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java @@ -17,6 +17,7 @@ import bubble.service.device.DeviceService; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.cobbzilla.util.collection.SingletonList; +import org.cobbzilla.util.string.StringUtil; import org.cobbzilla.wizard.cache.redis.RedisService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -189,9 +190,11 @@ public class StandardAppPrimerService implements AppPrimerService { if (!empty(rejectDomains) || !empty(blockDomains) || !empty(filterDomains) || !empty(flexDomains) || !empty(flexExcludeDomains)) { for (String ip : accountDeviceIps.get(device.getUuid())) { if (!empty(rejectDomains)) { + rejectDomains.removeAll(whiteListDomains); AppRuleDriver.defineRedisRejectSet(redis, ip, app.getName() + ":" + app.getUuid(), rejectDomains.toArray(String[]::new)); } if (!empty(blockDomains)) { + blockDomains.removeAll(whiteListDomains); AppRuleDriver.defineRedisBlockSet(redis, ip, app.getName() + ":" + app.getUuid(), blockDomains.toArray(String[]::new)); } if (!empty(whiteListDomains)) { From d484fd411ad7b85e1a0ab305d1eb2ad84501cd00 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Sat, 19 Sep 2020 05:52:15 -0400 Subject: [PATCH 13/20] fix nonce detection/insertion --- .../resources/stream/FilterHttpRequest.java | 2 +- .../roles/mitmproxy/files/bubble_modify.py | 48 ++++++++++++++----- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/bubble-server/src/main/java/bubble/resources/stream/FilterHttpRequest.java b/bubble-server/src/main/java/bubble/resources/stream/FilterHttpRequest.java index 62869254..5440c9f8 100644 --- a/bubble-server/src/main/java/bubble/resources/stream/FilterHttpRequest.java +++ b/bubble-server/src/main/java/bubble/resources/stream/FilterHttpRequest.java @@ -43,7 +43,7 @@ public class FilterHttpRequest { @Getter @Setter private String contentSecurityPolicy; public boolean hasContentSecurityPolicy () { return !empty(contentSecurityPolicy); } - public static final Pattern NONCE_PATTERN = Pattern.compile(";\\s*script-src\\s+.*'nonce-([^']+)'"); + public static final Pattern NONCE_PATTERN = Pattern.compile("\\s*script-src\\s+.*?'nonce-([^']+)'"); @Getter(lazy=true) private final String scriptNonce = initScriptNonce(); private String initScriptNonce () { diff --git a/bubble-server/src/main/resources/packer/roles/mitmproxy/files/bubble_modify.py b/bubble-server/src/main/resources/packer/roles/mitmproxy/files/bubble_modify.py index 4b18af78..44e5fc8a 100644 --- a/bubble-server/src/main/resources/packer/roles/mitmproxy/files/bubble_modify.py +++ b/bubble-server/src/main/resources/packer/roles/mitmproxy/files/bubble_modify.py @@ -54,19 +54,45 @@ def ensure_bubble_csp(csp, req_id): elif part.startswith(' script-src ') or part.startswith('script-src '): tokens = part.split() - if "'self'" in tokens: - # allows from self, check if there is an existing nonce. if so we will reuse it - found_nonce = False - for token in tokens: - if " 'nonce-" in token: - found_nonce = True - break - # if no nonce, then add our nonce - if not found_nonce: + found_unsafe_inline = "'unsafe-inline'" in tokens + found_nonce = False + found_sha = False + for token in tokens: + if not found_nonce and "'nonce-" in token: + found_nonce = True + if not found_sha and ("'sha256-" in token or "'sha384-" in token or "'sha512-" in token): + found_sha = True + if found_nonce and found_sha: + break + if found_unsafe_inline: + if not found_sha and not found_nonce: + # unsafe-inline is set, and there are no shas or nonces + # then we can add ourselves as unsafe inline without any nonce + new_csp = add_csp_part(new_csp, part) + elif found_nonce: + # unsafe-inline is set and there is a nonce, we keep the nonce + new_csp = add_csp_part(new_csp, part) + elif found_sha: + # unsafe-inline is set and there is no nonce, but at least one sha is present + # we must add a nonce for ourselves new_csp = add_csp_part(new_csp, " ".join(tokens) + " 'nonce-"+base64.b64encode(bytes(req_id, 'utf-8')).decode()+"' ") + else: + # unreachable, just for sanity + new_csp = add_csp_part(new_csp, part) else: - # does not allow from self, so add self with our nonce - new_csp = add_csp_part(new_csp, tokens[0] + " 'self' 'nonce-"+base64.b64encode(bytes(req_id, 'utf-8')).decode()+"' " + " ".join(tokens[1:])) + # unsafe-inline is not set + if not found_nonce or found_sha: + # there is no nonce or a sha is set, add unsafe-inline and our nonce + new_csp = add_csp_part(new_csp, tokens[0] + " 'unsafe-inline' 'nonce-"+base64.b64encode(bytes(req_id, 'utf-8')).decode()+"' " + " ".join(tokens[1:])) + elif found_nonce: + # there is a nonce, keep it and add unsafe-inline + new_csp = add_csp_part(new_csp, tokens[0] + " 'unsafe-inline' " + " ".join[tokens[1:]]) + elif found_sha: + # no nonce but a sha is set, add our nonce and unsafe-inline + new_csp = add_csp_part(new_csp, tokens[0] + " 'unsafe-inline' 'nonce-"+base64.b64encode(bytes(req_id, 'utf-8')).decode()+"' " + " ".join(tokens[1:])) + else: + # unreachable, just for sanity + new_csp = add_csp_part(new_csp, part) else: new_csp = add_csp_part(new_csp, part) return new_csp From f7b31b68d9a4d807d4af7b4bcff9b5f5aa469b0b Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Sat, 19 Sep 2020 05:54:09 -0400 Subject: [PATCH 14/20] ensure flex exclude domains are removed from flex domains --- .../java/bubble/service/stream/StandardAppPrimerService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java b/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java index 89439164..f11086eb 100644 --- a/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java +++ b/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java @@ -17,7 +17,6 @@ import bubble.service.device.DeviceService; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.cobbzilla.util.collection.SingletonList; -import org.cobbzilla.util.string.StringUtil; import org.cobbzilla.wizard.cache.redis.RedisService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -204,6 +203,7 @@ public class StandardAppPrimerService implements AppPrimerService { AppRuleDriver.defineRedisFilterSet(redis, ip, app.getName() + ":" + app.getUuid(), filterDomains.toArray(String[]::new)); } if (!empty(flexDomains)) { + flexDomains.removeAll(flexExcludeDomains); AppRuleDriver.defineRedisFlexSet(redis, ip, app.getName() + ":" + app.getUuid(), flexDomains.toArray(String[]::new)); } if (!empty(flexExcludeDomains)) { From 8c980a14c468143983e18eef0fbbbba1fab1c7d0 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Sat, 19 Sep 2020 13:47:24 -0400 Subject: [PATCH 15/20] push removed routes to flex routers. only track flex routes for first admin, they apply to all users --- .../passthru/TlsPassthruAppConfigDriver.java | 9 +- .../src/main/java/bubble/dao/SessionDAO.java | 9 ++ .../java/bubble/model/account/Account.java | 3 + .../bubble/model/device/DeviceStatus.java | 2 + .../model/device/FlexRouterRemoveRoutes.java | 19 ++++ .../device/StandardFlexRouterService.java | 99 +++++++++++++++++-- .../stream/StandardAppPrimerService.java | 53 ++++++---- .../apps/passthru/bubbleApp_passthru.json | 2 + bubble-web | 2 +- 9 files changed, 169 insertions(+), 29 deletions(-) create mode 100644 bubble-server/src/main/java/bubble/model/device/FlexRouterRemoveRoutes.java diff --git a/bubble-server/src/main/java/bubble/app/passthru/TlsPassthruAppConfigDriver.java b/bubble-server/src/main/java/bubble/app/passthru/TlsPassthruAppConfigDriver.java index 1e7a8547..fd06320b 100644 --- a/bubble-server/src/main/java/bubble/app/passthru/TlsPassthruAppConfigDriver.java +++ b/bubble-server/src/main/java/bubble/app/passthru/TlsPassthruAppConfigDriver.java @@ -21,8 +21,7 @@ import java.util.stream.Collectors; import static org.cobbzilla.util.daemon.ZillaRuntime.empty; import static org.cobbzilla.util.json.JsonUtil.json; -import static org.cobbzilla.wizard.resources.ResourceUtil.invalidEx; -import static org.cobbzilla.wizard.resources.ResourceUtil.notFoundEx; +import static org.cobbzilla.wizard.resources.ResourceUtil.*; @Slf4j public class TlsPassthruAppConfigDriver extends AppConfigDriverBase { @@ -63,12 +62,14 @@ public class TlsPassthruAppConfigDriver extends AppConfigDriverBase { } private Set loadManageFlexFeeds(Account account, BubbleApp app) { + if (!account.admin()) throw forbiddenEx(); final TlsPassthruConfig config = getConfig(account, app); config.getFlexSet(); // ensure names are initialized return config.getFlexFeedSet(); } private Set loadManageFlexDomains(Account account, BubbleApp app) { + if (!account.admin()) throw forbiddenEx(); final TlsPassthruConfig config = getConfig(account, app); return !config.hasFlexFqdnList() ? Collections.emptySet() : Arrays.stream(config.getFlexFqdnList()) @@ -154,6 +155,7 @@ public class TlsPassthruAppConfigDriver extends AppConfigDriverBase { } private List addFlexFqdn(Account account, BubbleApp app, JsonNode data) { + if (!account.admin()) throw forbiddenEx(); final JsonNode fqdnNode = data.get(PARAM_FLEX_FQDN); if (fqdnNode == null || fqdnNode.textValue() == null || empty(fqdnNode.textValue().trim())) { throw invalidEx("err.flexFqdn.flexFqdnRequired"); @@ -177,6 +179,7 @@ public class TlsPassthruAppConfigDriver extends AppConfigDriverBase { } private Set addFlexFeed(Account account, BubbleApp app, Map params, JsonNode data) { + if (!account.admin()) throw forbiddenEx(); final JsonNode urlNode = data.get(PARAM_FLEX_FEED_URL); if (urlNode == null || urlNode.textValue() == null || empty(urlNode.textValue().trim())) { throw invalidEx("err.flexFeedUrl.feedUrlRequired"); @@ -233,6 +236,7 @@ public class TlsPassthruAppConfigDriver extends AppConfigDriverBase { } private List removeFlexFqdn(Account account, BubbleApp app, String id) { + if (!account.admin()) throw forbiddenEx(); final AppRule rule = loadRule(account, app); loadDriver(account, rule, TlsPassthruRuleDriver.class); // validate proper driver final TlsPassthruConfig config = getConfig(account, app); @@ -245,6 +249,7 @@ public class TlsPassthruAppConfigDriver extends AppConfigDriverBase { } public Set removeFlexFeed(Account account, BubbleApp app, String id) { + if (!account.admin()) throw forbiddenEx(); final AppRule rule = loadRule(account, app); loadDriver(account, rule, TlsPassthruRuleDriver.class); // validate proper driver final TlsPassthruConfig config = getConfig(account, app).removeFlexFeed(id); diff --git a/bubble-server/src/main/java/bubble/dao/SessionDAO.java b/bubble-server/src/main/java/bubble/dao/SessionDAO.java index 50330576..19600753 100644 --- a/bubble-server/src/main/java/bubble/dao/SessionDAO.java +++ b/bubble-server/src/main/java/bubble/dao/SessionDAO.java @@ -4,13 +4,22 @@ */ package bubble.dao; +import bubble.dao.account.AccountDAO; import bubble.model.account.Account; import org.cobbzilla.wizard.dao.AbstractSessionDAO; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @Repository public class SessionDAO extends AbstractSessionDAO { + @Autowired private AccountDAO accountDAO; + @Override protected boolean canStartSession(Account account) { return !account.suspended(); } + @Override public String create(Account account) { + account.setFirstAdmin(account.getUuid().equals(accountDAO.getFirstAdmin().getUuid())); + return super.create(account); + } + } diff --git a/bubble-server/src/main/java/bubble/model/account/Account.java b/bubble-server/src/main/java/bubble/model/account/Account.java index af578878..84983722 100644 --- a/bubble-server/src/main/java/bubble/model/account/Account.java +++ b/bubble-server/src/main/java/bubble/model/account/Account.java @@ -141,6 +141,9 @@ public class Account extends IdentifiableBaseParentEntity implements TokenPrinci @Getter @Setter private Boolean admin = false; public boolean admin () { return bool(admin); } + // set in SessionDAO so UI can know if the user is first admin + @Transient @Getter @Setter private boolean firstAdmin = false; + @ECIndex(unique=true, where="sage = true") @ECField(index=70) @Getter @Setter private Boolean sage = false; public boolean sage () { return bool(sage); } diff --git a/bubble-server/src/main/java/bubble/model/device/DeviceStatus.java b/bubble-server/src/main/java/bubble/model/device/DeviceStatus.java index 53bb1aa4..60487ac8 100644 --- a/bubble-server/src/main/java/bubble/model/device/DeviceStatus.java +++ b/bubble-server/src/main/java/bubble/model/device/DeviceStatus.java @@ -34,6 +34,7 @@ public class DeviceStatus { @Getter @Setter private String bytesReceived; @Getter @Setter private String receivedUnits; + @Getter @Setter private Integer lastHandshakeDays; @Getter @Setter private Integer lastHandshakeHours; @Getter @Setter private Integer lastHandshakeMinutes; @Getter @Setter private Integer lastHandshakeSeconds; @@ -101,6 +102,7 @@ public class DeviceStatus { String unit = parts[i+1].trim(); if (unit.endsWith(",")) unit = unit.substring(0, unit.length()-1); switch (unit) { + case "day": case "days": setLastHandshakeDays(count); break; case "hour": case "hours": setLastHandshakeHours(count); break; case "minute": case "minutes": setLastHandshakeMinutes(count); break; case "second": case "seconds": setLastHandshakeSeconds(count); break; diff --git a/bubble-server/src/main/java/bubble/model/device/FlexRouterRemoveRoutes.java b/bubble-server/src/main/java/bubble/model/device/FlexRouterRemoveRoutes.java new file mode 100644 index 00000000..af9ed2af --- /dev/null +++ b/bubble-server/src/main/java/bubble/model/device/FlexRouterRemoveRoutes.java @@ -0,0 +1,19 @@ +package bubble.model.device; + +import lombok.Getter; +import lombok.experimental.Accessors; + +import java.util.Collection; + +@Accessors(chain=true) +public class FlexRouterRemoveRoutes { + + @Getter private final FlexRouterPing ping; + @Getter private final String[] routes; + + public FlexRouterRemoveRoutes (FlexRouter router, Collection routes) { + this.ping = router.pingObject(); + this.routes = routes.toArray(String[]::new); + } + +} diff --git a/bubble-server/src/main/java/bubble/service/device/StandardFlexRouterService.java b/bubble-server/src/main/java/bubble/service/device/StandardFlexRouterService.java index 45e91df8..56185a2b 100644 --- a/bubble-server/src/main/java/bubble/service/device/StandardFlexRouterService.java +++ b/bubble-server/src/main/java/bubble/service/device/StandardFlexRouterService.java @@ -9,6 +9,7 @@ import bubble.dao.device.FlexRouterDAO; import bubble.model.device.DeviceStatus; import bubble.model.device.FlexRouter; import bubble.model.device.FlexRouterPing; +import bubble.model.device.FlexRouterRemoveRoutes; import bubble.service.cloud.GeoService; import lombok.AllArgsConstructor; import lombok.Cleanup; @@ -17,6 +18,8 @@ import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; +import org.cobbzilla.util.collection.ExpirationEvictionPolicy; +import org.cobbzilla.util.collection.ExpirationMap; import org.cobbzilla.util.collection.SingletonSet; import org.cobbzilla.util.daemon.AwaitResult; import org.cobbzilla.util.daemon.SimpleDaemon; @@ -24,6 +27,7 @@ import org.cobbzilla.util.http.HttpRequestBean; import org.cobbzilla.util.http.HttpResponseBean; import org.cobbzilla.util.http.HttpUtil; import org.cobbzilla.util.io.FileUtil; +import org.cobbzilla.util.string.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -35,11 +39,14 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; import static bubble.ApiConstants.HOME_DIR; import static bubble.model.device.FlexRouterPing.MAX_PING_AGE; import static java.util.concurrent.TimeUnit.MINUTES; import static java.util.concurrent.TimeUnit.SECONDS; +import static java.util.function.Function.identity; import static org.cobbzilla.util.daemon.Await.awaitAll; import static org.cobbzilla.util.daemon.DaemonThreadFactory.fixedPool; import static org.cobbzilla.util.daemon.ZillaRuntime.*; @@ -57,13 +64,18 @@ public class StandardFlexRouterService extends SimpleDaemon implements FlexRoute private static final long PING_SLEEP_FACTOR = SECONDS.toMillis(2); - // HttpClient timeouts are in seconds - public static final int DEFAULT_PING_TIMEOUT = (int) SECONDS.toSeconds(MAX_PING_AGE/2); + public static final int DEFAULT_PING_TIMEOUT = (int) MAX_PING_AGE/2; public static final RequestConfig DEFAULT_PING_REQUEST_CONFIG = RequestConfig.custom() .setConnectTimeout(DEFAULT_PING_TIMEOUT) .setSocketTimeout(DEFAULT_PING_TIMEOUT) .setConnectionRequestTimeout(DEFAULT_PING_TIMEOUT).build(); + public static final int DEFAULT_UPDATE_ROUTES_TIMEOUT = (int) SECONDS.toMillis(10); + public static final RequestConfig DEFAULT_UPDATE_ROUTES_REQUEST_CONFIG = RequestConfig.custom() + .setConnectTimeout(DEFAULT_UPDATE_ROUTES_TIMEOUT) + .setSocketTimeout(DEFAULT_UPDATE_ROUTES_TIMEOUT) + .setConnectionRequestTimeout(DEFAULT_UPDATE_ROUTES_TIMEOUT).build(); + // wait for ssh key to be written private static final long FIRST_TIME_WAIT = SECONDS.toMillis(10); private static final long INTERRUPT_WAIT = FIRST_TIME_WAIT/2; @@ -71,14 +83,18 @@ public class StandardFlexRouterService extends SimpleDaemon implements FlexRoute public static final long PING_ALL_TIMEOUT = (SECONDS.toMillis(1) * DEFAULT_PING_TIMEOUT * MAX_PING_TRIES) + FIRST_TIME_WAIT; + public static final long UPDATE_ROUTES_ALL_TIMEOUT = SECONDS.toMillis(30); + // thread pool size public static final int DEFAULT_MAX_TUNNELS = 5; - private static CloseableHttpClient getHttpClient() { + private static CloseableHttpClient getHttpClient(RequestConfig requestConfig) { return HttpClientBuilder.create() - .setDefaultRequestConfig(DEFAULT_PING_REQUEST_CONFIG) + .setDefaultRequestConfig(requestConfig) .build(); } + private static CloseableHttpClient getPingHttpClient() { return getHttpClient(DEFAULT_PING_REQUEST_CONFIG); } + private static CloseableHttpClient getUpdateRoutesHttpClient() { return getHttpClient(DEFAULT_UPDATE_ROUTES_REQUEST_CONFIG); } public static final long DEFAULT_SLEEP_TIME = MINUTES.toMillis(2); @@ -162,10 +178,52 @@ public class StandardFlexRouterService extends SimpleDaemon implements FlexRoute } } + private final AtomicReference> mostRecentFlexDomains = new AtomicReference<>(null); + private final Map recentlyRemovedFlexDomains = new ExpirationMap<>(MINUTES.toMillis(20), ExpirationEvictionPolicy.ctime_or_atime); + + public void updateFlexRoutes(Set flexDomains) { + synchronized (mostRecentFlexDomains) { + final Set mostRecentDomains = mostRecentFlexDomains.get() == null ? Collections.emptySet() : mostRecentFlexDomains.get(); + if (!mostRecentDomains.isEmpty()) { + // what should we remove now? + final Set routesToRemove = new HashSet<>(mostRecentDomains); + routesToRemove.removeAll(flexDomains); + + // add to recently removed, we will remove all of these in case a previous update was missed + recentlyRemovedFlexDomains.putAll(routesToRemove.stream().collect(Collectors.toMap(identity(), identity()))); + + // but exclude domains that are currently flex routed, we don't want to remove these + for (String current : flexDomains) recentlyRemovedFlexDomains.remove(current); + + if (!recentlyRemovedFlexDomains.isEmpty()) { + try { + @Cleanup final CloseableHttpClient httpClient = getUpdateRoutesHttpClient(); + final List routers = flexRouterDAO.findEnabledAndRegistered(); + if (log.isDebugEnabled()) log.debug("updateFlexRoutes: updating "+routers.size()+" routers"); + final List> futures = new ArrayList<>(); + @Cleanup("shutdownNow") final ExecutorService exec = fixedPool(DEFAULT_MAX_TUNNELS, "StandardFlexRouterService.updateFlexRoutes"); + final Set routes = recentlyRemovedFlexDomains.keySet(); + for (FlexRouter router : routers) { + if (log.isDebugEnabled()) log.debug("updateFlexRoutes: starting job for router: " + router + " with routes to remove: "+StringUtil.toString(routes)); + futures.add(exec.submit(new FlexRemoveRoutesJob(router, routes, httpClient))); + } + final AwaitResult awaitResult = awaitAll(futures, UPDATE_ROUTES_ALL_TIMEOUT); + if (log.isTraceEnabled()) log.trace("updateFlexRoutes: awaitResult=" + awaitResult); + } catch (Exception e) { + log.error("updateFlexRoutes: " + shortError(e)); + } + } + } else { + if (log.isDebugEnabled()) log.debug("updateFlexRoutes: no routes to remove"); + } + mostRecentFlexDomains.set(flexDomains); + } + } + @Override protected void process() { synchronized (interrupted) { interrupted.set(false); } try { - @Cleanup final CloseableHttpClient httpClient = getHttpClient(); + @Cleanup final CloseableHttpClient httpClient = getPingHttpClient(); final List routers = flexRouterDAO.findEnabledAndRegistered(); if (log.isTraceEnabled()) log.trace("process: starting, will ping "+routers.size()+" routers"); final List> futures = new ArrayList<>(); @@ -219,7 +277,7 @@ public class StandardFlexRouterService extends SimpleDaemon implements FlexRoute } } catch (Exception e) { - log.info(prefix+"error: "+shortError(e)); + log.error(prefix+"error: "+shortError(e)); } setStatus(router, FlexRouterStatus.unreachable); } @@ -298,7 +356,7 @@ public class StandardFlexRouterService extends SimpleDaemon implements FlexRoute boolean update = false; if (!active) { if (pollFailures.computeIfAbsent(router.getUuid(), k -> new AtomicInteger(0)).incrementAndGet() > MAX_POLL_FAILURES) { - log.warn("process: too many poll failures for router ("+router+"), marking unregistered"); + if (log.isWarnEnabled()) log.warn("process: too many poll failures for router ("+router+"), marking unregistered"); router.setRegistered(false); update = true; } @@ -320,4 +378,31 @@ public class StandardFlexRouterService extends SimpleDaemon implements FlexRoute } } + @AllArgsConstructor + private static class FlexRemoveRoutesJob implements Callable { + private final FlexRouter router; + private final Collection routes; + private final HttpClient httpClient; + + @Override public Boolean call() { + final String removeUrl = router.proxyBaseUri() + "/remove"; + final HttpRequestBean request = new HttpRequestBean(POST, removeUrl); + final String prefix = "FlexRouterRemoveJob(" + router + ", "+ StringUtil.toString(routes)+"): "; + request.setEntity(json(new FlexRouterRemoveRoutes(router, routes))); + try { + if (log.isDebugEnabled()) log.debug(prefix+"sending JSON message to remove routes..."); + final HttpResponseBean response = HttpUtil.getResponse(request, httpClient); + if (!response.isOk()) { + log.error(prefix+"response not OK: "+response); + } else { + if (log.isDebugEnabled()) log.debug(prefix+"routes removed from router"); + return true; + } + } catch (Exception e) { + log.error(prefix+"error: "+shortError(e)); + } + return false; + } + } + } diff --git a/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java b/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java index f11086eb..bd94ffa3 100644 --- a/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java +++ b/bubble-server/src/main/java/bubble/service/stream/StandardAppPrimerService.java @@ -14,6 +14,7 @@ import bubble.model.device.Device; import bubble.rule.AppRuleDriver; import bubble.server.BubbleConfiguration; import bubble.service.device.DeviceService; +import bubble.service.device.StandardFlexRouterService; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.cobbzilla.util.collection.SingletonList; @@ -39,6 +40,7 @@ public class StandardAppPrimerService implements AppPrimerService { @Autowired private AppRuleDAO ruleDAO; @Autowired private RuleDriverDAO driverDAO; @Autowired private AppDataDAO dataDAO; + @Autowired private StandardFlexRouterService flexRouterService; @Autowired private RedisService redis; @Autowired private BubbleConfiguration configuration; @@ -117,6 +119,13 @@ public class StandardAppPrimerService implements AppPrimerService { } if (accountDeviceIps.isEmpty()) return; + // flex domains can only be managed by the first admin + final Account firstAdmin = accountDAO.getFirstAdmin(); + account.setFirstAdmin(account.getUuid().equals(firstAdmin.getUuid())); + boolean updateFlexRouters = false; + Set flexDomains = null; + Set flexExcludeDomains = null; + final List appsToPrime = singleApp == null ? appDAO.findByAccount(account.getUuid()).stream() .filter(BubbleApp::canPrime) @@ -145,8 +154,6 @@ public class StandardAppPrimerService implements AppPrimerService { final Set blockDomains = new HashSet<>(); final Set whiteListDomains = new HashSet<>(); final Set filterDomains = new HashSet<>(); - final Set flexDomains = new HashSet<>(); - final Set flexExcludeDomains = new HashSet<>(); for (AppMatcher matcher : matchers) { final AppRuleDriver appRuleDriver = rule.initDriver(app, driver, matcher, account, device); final Set rejects = appRuleDriver.getPrimedRejectDomains(); @@ -173,17 +180,19 @@ public class StandardAppPrimerService implements AppPrimerService { } else { filterDomains.addAll(filters); } - final Set flexes = appRuleDriver.getPrimedFlexDomains(); - if (empty(flexes)) { - log.debug("_prime: no flexDomains for device/app/rule/matcher: " + device.getName() + "/" + app.getName() + "/" + rule.getName() + "/" + matcher.getName()); - } else { - flexDomains.addAll(flexes); - } - final Set flexExcludes = appRuleDriver.getPrimedFlexExcludeDomains(); - if (empty(flexExcludes)) { - log.debug("_prime: no flexExcludeDomains for device/app/rule/matcher: " + device.getName() + "/" + app.getName() + "/" + rule.getName() + "/" + matcher.getName()); - } else { - flexExcludeDomains.addAll(flexExcludes); + if (account.isFirstAdmin() && flexDomains == null) { + final Set flexes = appRuleDriver.getPrimedFlexDomains(); + if (empty(flexes)) { + log.debug("_prime: no flexDomains for device/app/rule/matcher: " + device.getName() + "/" + app.getName() + "/" + rule.getName() + "/" + matcher.getName()); + } else { + flexDomains = new HashSet<>(flexes); + } + final Set flexExcludes = appRuleDriver.getPrimedFlexExcludeDomains(); + if (empty(flexExcludes)) { + log.debug("_prime: no flexExcludeDomains for device/app/rule/matcher: " + device.getName() + "/" + app.getName() + "/" + rule.getName() + "/" + matcher.getName()); + } else { + flexExcludeDomains = new HashSet<>(flexExcludes); + } } } if (!empty(rejectDomains) || !empty(blockDomains) || !empty(filterDomains) || !empty(flexDomains) || !empty(flexExcludeDomains)) { @@ -202,17 +211,23 @@ public class StandardAppPrimerService implements AppPrimerService { if (!empty(filterDomains)) { AppRuleDriver.defineRedisFilterSet(redis, ip, app.getName() + ":" + app.getUuid(), filterDomains.toArray(String[]::new)); } - if (!empty(flexDomains)) { - flexDomains.removeAll(flexExcludeDomains); - AppRuleDriver.defineRedisFlexSet(redis, ip, app.getName() + ":" + app.getUuid(), flexDomains.toArray(String[]::new)); - } - if (!empty(flexExcludeDomains)) { - AppRuleDriver.defineRedisFlexExcludeSet(redis, ip, app.getName() + ":" + app.getUuid(), flexExcludeDomains.toArray(String[]::new)); + if (account.isFirstAdmin() && (!empty(flexDomains) || !empty(flexExcludeDomains))) { + updateFlexRouters = true; + if (!empty(flexDomains)) { + if (flexExcludeDomains != null) flexDomains.removeAll(flexExcludeDomains); + AppRuleDriver.defineRedisFlexSet(redis, ip, app.getName() + ":" + app.getUuid(), flexDomains.toArray(String[]::new)); + } + if (!empty(flexExcludeDomains)) { + AppRuleDriver.defineRedisFlexExcludeSet(redis, ip, app.getName() + ":" + app.getUuid(), flexExcludeDomains.toArray(String[]::new)); + } } } } } } + if (updateFlexRouters && !empty(flexDomains)) { + flexRouterService.updateFlexRoutes(flexDomains); + } } } catch (Exception e) { die("_prime: "+shortError(e), e); diff --git a/bubble-server/src/main/resources/models/apps/passthru/bubbleApp_passthru.json b/bubble-server/src/main/resources/models/apps/passthru/bubbleApp_passthru.json index 1619d202..8fe6cf2c 100644 --- a/bubble-server/src/main/resources/models/apps/passthru/bubbleApp_passthru.json +++ b/bubble-server/src/main/resources/models/apps/passthru/bubbleApp_passthru.json @@ -48,6 +48,7 @@ "name": "manageFlexDomains", "scope": "app", "root": "true", + "when": "account.firstAdmin === true", "fields": ["flexFqdn"], "actions": [ {"name": "removeFlexFqdn", "index": 10}, @@ -61,6 +62,7 @@ "name": "manageFlexFeeds", "scope": "app", "root": "true", + "when": "account.firstAdmin === true", "fields": ["flexFeedName", "flexFeedUrl"], "actions": [ {"name": "removeFlexFeed", "index": 10}, diff --git a/bubble-web b/bubble-web index 37dd89bd..61a7f288 160000 --- a/bubble-web +++ b/bubble-web @@ -1 +1 @@ -Subproject commit 37dd89bd78949a63c68a64596b4e1c105809a577 +Subproject commit 61a7f288e515a185f2055bbe1e513943d54ac66c From 0aebc52c741e91273e76e64befcd65d8f15e081a Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Sun, 20 Sep 2020 13:01:04 -0400 Subject: [PATCH 16/20] ensure new SSH key is present before returning from create --- .../main/java/bubble/resources/device/FlexRoutersResource.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bubble-server/src/main/java/bubble/resources/device/FlexRoutersResource.java b/bubble-server/src/main/java/bubble/resources/device/FlexRoutersResource.java index 68eb8997..72a6fa09 100644 --- a/bubble-server/src/main/java/bubble/resources/device/FlexRoutersResource.java +++ b/bubble-server/src/main/java/bubble/resources/device/FlexRoutersResource.java @@ -27,7 +27,9 @@ import java.math.BigInteger; import java.net.InetAddress; import static bubble.ApiConstants.EP_STATUS; +import static java.util.concurrent.TimeUnit.SECONDS; import static org.cobbzilla.util.network.PortPicker.portIsAvailable; +import static org.cobbzilla.util.system.Sleep.sleep; import static org.cobbzilla.wizard.resources.ResourceUtil.*; @Slf4j @@ -60,6 +62,7 @@ public class FlexRoutersResource extends AccountOwnedResource Date: Sun, 20 Sep 2020 13:04:35 -0400 Subject: [PATCH 17/20] bump version --- .../src/main/resources/META-INF/bubble/bubble.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bubble-server/src/main/resources/META-INF/bubble/bubble.properties b/bubble-server/src/main/resources/META-INF/bubble/bubble.properties index 5e08d551..b4c6555a 100644 --- a/bubble-server/src/main/resources/META-INF/bubble/bubble.properties +++ b/bubble-server/src/main/resources/META-INF/bubble/bubble.properties @@ -1 +1 @@ -bubble.version=Adventure 1.2.2 +bubble.version=Adventure 1.2.3 From fe2332b427b44cc5e4406272df17ee7f3ba9f23c Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Mon, 21 Sep 2020 15:50:49 -0400 Subject: [PATCH 18/20] no more hard-coding UTF-8, detect the charset from the response and use that --- .../bubble/rule/AbstractAppRuleDriver.java | 23 +- .../main/java/bubble/rule/AppRuleDriver.java | 9 +- .../rule/bblock/BubbleBlockRuleDriver.java | 9 +- .../social/block/JsUserBlockerRuleDriver.java | 5 +- .../social/block/UserBlockerRuleDriver.java | 8 +- .../service/stream/ActiveStreamState.java | 46 +- .../stream/StandardRuleEngineService.java | 18 +- .../service/stream/StreamConstants.java | 11 + .../service/stream/charset/BubbleCharSet.java | 27 + .../stream/charset/CharsetDetector.java | 23 + .../stream/charset/HtmlCharsetDetector.java | 43 + .../charset/HtmlStreamCharsetDetector.java | 92 + .../test/filter/CharsetDetectionTest.java | 138 + .../bubble/test/filter/PassthruDriver.java | 21 + .../charset_detection/equiv-windows-1250.html | 2552 ++++++++++++++++ .../meta-windows-1250-late.html | 2569 +++++++++++++++++ .../charset_detection/meta-windows-1250.html | 2554 ++++++++++++++++ pom.xml | 2 + utils/cobbzilla-parent | 2 +- utils/cobbzilla-utils | 2 +- utils/cobbzilla-wizard | 2 +- 21 files changed, 8118 insertions(+), 38 deletions(-) create mode 100644 bubble-server/src/main/java/bubble/service/stream/StreamConstants.java create mode 100644 bubble-server/src/main/java/bubble/service/stream/charset/BubbleCharSet.java create mode 100644 bubble-server/src/main/java/bubble/service/stream/charset/CharsetDetector.java create mode 100644 bubble-server/src/main/java/bubble/service/stream/charset/HtmlCharsetDetector.java create mode 100644 bubble-server/src/main/java/bubble/service/stream/charset/HtmlStreamCharsetDetector.java create mode 100644 bubble-server/src/test/java/bubble/test/filter/CharsetDetectionTest.java create mode 100644 bubble-server/src/test/java/bubble/test/filter/PassthruDriver.java create mode 100644 bubble-server/src/test/resources/charset_detection/equiv-windows-1250.html create mode 100644 bubble-server/src/test/resources/charset_detection/meta-windows-1250-late.html create mode 100644 bubble-server/src/test/resources/charset_detection/meta-windows-1250.html diff --git a/bubble-server/src/main/java/bubble/rule/AbstractAppRuleDriver.java b/bubble-server/src/main/java/bubble/rule/AbstractAppRuleDriver.java index f58a278d..67d9def3 100644 --- a/bubble-server/src/main/java/bubble/rule/AbstractAppRuleDriver.java +++ b/bubble-server/src/main/java/bubble/rule/AbstractAppRuleDriver.java @@ -36,6 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired; import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -51,7 +52,6 @@ import static org.cobbzilla.util.io.FileUtil.basename; import static org.cobbzilla.util.io.regex.RegexReplacementFilter.DEFAULT_PREFIX_REPLACEMENT_WITH_MATCH; import static org.cobbzilla.util.json.JsonUtil.json; import static org.cobbzilla.util.security.ShaUtil.sha256_hex; -import static org.cobbzilla.util.string.StringUtil.UTF8cs; public abstract class AbstractAppRuleDriver implements AppRuleDriver { @@ -105,19 +105,21 @@ public abstract class AbstractAppRuleDriver implements AppRuleDriver { } public static final String DEFAULT_INSERTION_REGEX = "<\\s*head[^>]*>"; - public static final String DEFAULT_SCRIPT_OPEN = ""; protected static String insertionRegex (String customRegex) { return empty(customRegex) ? DEFAULT_INSERTION_REGEX : customRegex; } - protected static String scriptOpen (FilterHttpRequest filterRequest, String customNonceOpen, String customNoNonceOpen) { - return filterRequest.hasScriptNonce() + protected static String scriptOpen (FilterHttpRequest filterRequest, String charset, String customNonceOpen, String customNoNonceOpen) { + return (filterRequest.hasScriptNonce() ? (empty(customNonceOpen) ? DEFAULT_SCRIPT_NONCE_OPEN : customNonceOpen).replace(NONCE_VAR, filterRequest.getScriptNonce()) - : (empty(customNoNonceOpen) ? DEFAULT_SCRIPT_OPEN : customNoNonceOpen); + : (empty(customNoNonceOpen) ? DEFAULT_SCRIPT_OPEN : customNoNonceOpen) + ).replace(CHARSET_VAR, charset); } protected static String scriptClose (String customClose) { @@ -153,6 +155,7 @@ public abstract class AbstractAppRuleDriver implements AppRuleDriver { @Getter(lazy=true) private final String scriptClose = scriptClose(requestModConfig().getScriptClose()); protected InputStream filterInsertJs(InputStream in, + Charset charset, FilterHttpRequest filterRequest, Map filterCtx, String bubbleJsTemplate, @@ -161,7 +164,7 @@ public abstract class AbstractAppRuleDriver implements AppRuleDriver { boolean showIcon) { final RequestModifierConfig modConfig = requestModConfig(); final String replacement = DEFAULT_PREFIX_REPLACEMENT_WITH_MATCH - + scriptOpen(filterRequest, modConfig.getScriptOpenNonce(), modConfig.getScriptOpenNoNonce()) + + scriptOpen(filterRequest, charset.name(), modConfig.getScriptOpenNonce(), modConfig.getScriptOpenNoNonce()) + getBubbleJs(filterRequest, filterCtx, bubbleJsTemplate, defaultSiteTemplate, siteJsInsertionVar, showIcon) + getScriptClose(); @@ -187,7 +190,7 @@ public abstract class AbstractAppRuleDriver implements AppRuleDriver { if (alternates != null) { final BubbleAlternateRegexReplacement firstAlt = alternates.get(0); if (log.isInfoEnabled()) log.info(prefix + "using alternate filter (0): " +firstAlt); - reader = new RegexFilterReader(new InputStreamReader(in), firstAlt.regexFilter(filterRequest, replacement)) + reader = new RegexFilterReader(new InputStreamReader(in, charset), firstAlt.regexFilter(filterRequest, replacement)) .setName(filterNamePrefix + "(alt0: "+firstAlt.getFqdnMatch()+") " + firstAlt.getInsertionRegex()) .setMaxMatches(1); for (int i=1; i ctx) { final String resource = locateResource(res); diff --git a/bubble-server/src/main/java/bubble/rule/bblock/BubbleBlockRuleDriver.java b/bubble-server/src/main/java/bubble/rule/bblock/BubbleBlockRuleDriver.java index bd3c5852..597949a8 100644 --- a/bubble-server/src/main/java/bubble/rule/bblock/BubbleBlockRuleDriver.java +++ b/bubble-server/src/main/java/bubble/rule/bblock/BubbleBlockRuleDriver.java @@ -30,6 +30,7 @@ import org.glassfish.jersey.server.ContainerRequest; import java.io.IOException; import java.io.InputStream; import java.net.URI; +import java.nio.charset.Charset; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicReference; @@ -331,7 +332,7 @@ public class BubbleBlockRuleDriver extends TrafficAnalyticsRuleDriver public static final String FILTER_CTX_DECISION = "decision"; public static final String BLOCK_STATS_JS = "BLOCK_STATS_JS"; - @Override public InputStream doFilterResponse(FilterHttpRequest filterRequest, InputStream in) { + @Override public InputStream doFilterResponse(FilterHttpRequest filterRequest, InputStream in, Charset charset) { final FilterMatchersRequest request = filterRequest.getMatchersResponse().getRequest(); final String prefix = "doFilterResponse("+filterRequest.getId()+"): "; @@ -384,14 +385,14 @@ public class BubbleBlockRuleDriver extends TrafficAnalyticsRuleDriver } if (bubbleBlockConfig.inPageBlocks() && showStats) { if (log.isInfoEnabled()) log.info(prefix + "SEND: both inPageBlocks and showStats are true, filtering"); - return filterInsertJs(in, filterRequest, filterCtx, BUBBLE_JS_TEMPLATE, getBubbleJsStatsTemplate(), BLOCK_STATS_JS, showStats); + return filterInsertJs(in, charset, filterRequest, filterCtx, BUBBLE_JS_TEMPLATE, getBubbleJsStatsTemplate(), BLOCK_STATS_JS, showStats); } if (bubbleBlockConfig.inPageBlocks()) { if (log.isInfoEnabled()) log.info(prefix + "SEND: both inPageBlocks is true, filtering"); - return filterInsertJs(in, filterRequest, filterCtx, BUBBLE_JS_TEMPLATE, EMPTY, BLOCK_STATS_JS, showStats); + return filterInsertJs(in, charset, filterRequest, filterCtx, BUBBLE_JS_TEMPLATE, EMPTY, BLOCK_STATS_JS, showStats); } if (log.isInfoEnabled()) log.info(prefix+"inserting JS for stats into: "+request.getUrl()+" with Content-Type: "+filterRequest.getContentType()); - return filterInsertJs(in, filterRequest, filterCtx, getBubbleJsStatsTemplate(), null, null, showStats); + return filterInsertJs(in, charset, filterRequest, filterCtx, getBubbleJsStatsTemplate(), null, null, showStats); } protected String getBubbleJsStatsTemplate () { diff --git a/bubble-server/src/main/java/bubble/rule/social/block/JsUserBlockerRuleDriver.java b/bubble-server/src/main/java/bubble/rule/social/block/JsUserBlockerRuleDriver.java index 205a9e80..7569f50e 100644 --- a/bubble-server/src/main/java/bubble/rule/social/block/JsUserBlockerRuleDriver.java +++ b/bubble-server/src/main/java/bubble/rule/social/block/JsUserBlockerRuleDriver.java @@ -12,6 +12,7 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import java.io.InputStream; +import java.nio.charset.Charset; import static org.cobbzilla.util.io.FileUtil.basename; import static org.cobbzilla.util.io.StreamUtil.stream2string; @@ -38,10 +39,10 @@ public class JsUserBlockerRuleDriver extends AbstractAppRuleDriver implements Re return loadTemplate(getDefaultSiteJsTemplate(), basename(getRequestModifierConfig().getSiteJsTemplate())); } - @Override public InputStream doFilterResponse(FilterHttpRequest filterRequest, InputStream in) { + @Override public InputStream doFilterResponse(FilterHttpRequest filterRequest, InputStream in, Charset charset) { if (!filterRequest.isHtml()) return in; final String bubbleJsTemplate = loadTemplate(BUBBLE_JS_TEMPLATE, BUBBLE_JS_TEMPLATE_NAME); final String siteJsTemplate = getSiteJsTemplate(); - return filterInsertJs(in, filterRequest, null, bubbleJsTemplate, siteJsTemplate, CTX_APPLY_BLOCKS_JS, true); + return filterInsertJs(in, charset, filterRequest, null, bubbleJsTemplate, siteJsTemplate, CTX_APPLY_BLOCKS_JS, true); } } diff --git a/bubble-server/src/main/java/bubble/rule/social/block/UserBlockerRuleDriver.java b/bubble-server/src/main/java/bubble/rule/social/block/UserBlockerRuleDriver.java index dcf3890c..f83f5c42 100644 --- a/bubble-server/src/main/java/bubble/rule/social/block/UserBlockerRuleDriver.java +++ b/bubble-server/src/main/java/bubble/rule/social/block/UserBlockerRuleDriver.java @@ -18,13 +18,13 @@ import org.cobbzilla.util.io.regex.RegexInsertionFilter; import org.cobbzilla.util.io.regex.RegexStreamFilter; import java.io.InputStream; +import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; import java.util.Set; import static org.cobbzilla.util.daemon.ZillaRuntime.die; import static org.cobbzilla.util.json.JsonUtil.json; -import static org.cobbzilla.util.string.StringUtil.UTF8cs; @Slf4j public class UserBlockerRuleDriver extends AbstractAppRuleDriver { @@ -60,14 +60,14 @@ public class UserBlockerRuleDriver extends AbstractAppRuleDriver { protected UserBlockerConfig configObject() { return json(getFullConfig(), UserBlockerConfig.class); } - @Override public InputStream doFilterResponse(FilterHttpRequest filterRequest, InputStream in) { + @Override public InputStream doFilterResponse(FilterHttpRequest filterRequest, InputStream in, Charset charset) { if (!filterRequest.isHtml()) return in; final String requestId = filterRequest.getId(); final UserBlockerStreamFilter filter = new UserBlockerStreamFilter(requestId, matcher, rule, configuration.getHttp().getBaseUri()); filter.configure(getFullConfig()); filter.setDataDAO(appDataDAO); - RegexFilterReader reader = new RegexFilterReader(in, RESPONSE_BUFSIZ, filter).setName("mainFilterReader"); + RegexFilterReader reader = new RegexFilterReader(in, charset, RESPONSE_BUFSIZ, filter).setName("mainFilterReader"); final UserBlockerConfig config = configObject(); if (config.hasCommentDecorator()) { @@ -110,7 +110,7 @@ public class UserBlockerRuleDriver extends AbstractAppRuleDriver { } } - return new ReaderInputStream(reader, UTF8cs); + return new ReaderInputStream(reader, charset); } protected String startElementRegex(String el) { return "(<\\s*" + el + "[^>]*>)"; } diff --git a/bubble-server/src/main/java/bubble/service/stream/ActiveStreamState.java b/bubble-server/src/main/java/bubble/service/stream/ActiveStreamState.java index f4ffdc76..5762e026 100644 --- a/bubble-server/src/main/java/bubble/service/stream/ActiveStreamState.java +++ b/bubble-server/src/main/java/bubble/service/stream/ActiveStreamState.java @@ -5,6 +5,9 @@ package bubble.service.stream; import bubble.resources.stream.FilterHttpRequest; +import bubble.service.stream.charset.BubbleCharSet; +import bubble.service.stream.charset.CharsetDetector; +import lombok.Cleanup; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; @@ -21,9 +24,11 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.Charset; import java.util.List; import java.util.Map; +import static bubble.service.stream.charset.CharsetDetector.charSetDetectorForContentType; import static java.util.concurrent.TimeUnit.DAYS; import static java.util.concurrent.TimeUnit.SECONDS; import static org.apache.commons.lang3.ArrayUtils.EMPTY_BYTE_ARRAY; @@ -32,15 +37,11 @@ import static org.cobbzilla.util.daemon.ZillaRuntime.shortError; import static org.cobbzilla.util.io.NullInputStream.NULL_STREAM; @Slf4j -class ActiveStreamState { +public class ActiveStreamState { public static final int DEFAULT_BYTE_BUFFER_SIZE = (int) (8 * Bytes.KB); public static final long MAX_BYTE_BUFFER_SIZE = (64 * Bytes.KB); - // do not wrap input with encoding stream until we have received at least this many bytes - // this avoids errors when creating a GZIPInputStream when only one or a few bytes are available - public static final long MIN_BYTES_BEFORE_WRAP = Bytes.KB; - // If no data is readable for this long, shut down the underlying MultiStream public static final long UNDERFLOW_TIMEOUT = SECONDS.toMillis(60); @@ -69,6 +70,7 @@ class ActiveStreamState { private InputStream output = null; private long totalBytesWritten = 0; private long totalBytesRead = 0; + private CharsetDetector charsetDetector; public ActiveStreamState(FilterHttpRequest request, List rules) { @@ -76,6 +78,7 @@ class ActiveStreamState { this.requestId = request.getId(); this.encoding = request.getEncoding(); this.firstRule = rules.get(0); + this.charsetDetector = charSetDetectorForContentType(request.getContentType()); final String prefix = "ActiveStreamState("+reqId()+"): "; if (empty(rules)) { @@ -130,8 +133,13 @@ class ActiveStreamState { } // do not wrap input with encoding stream until we have received at least MIN_BYTES_BEFORE_WRAP bytes // this avoids errors when creating a GZIPInputStream when only one or a few bytes are available - if (output == null && totalBytesWritten > MIN_BYTES_BEFORE_WRAP) { - output = outputStream(firstRule.getDriver().filterResponse(request, inputStream(multiStream))); + if (output == null && totalBytesWritten > StreamConstants.MIN_BYTES_BEFORE_WRAP) { + log.info("addChunk: detecting charset using "+charsetDetector.getClass().getSimpleName()); + final BubbleCharSet cs = getCharSet(false); + log.info("addChunk: detected charset: "+cs); + if (cs != null) { + output = outputStream(firstRule.getDriver().filterResponse(request, inputStream(multiStream), cs.getCharset())); + } } } } @@ -147,7 +155,27 @@ class ActiveStreamState { multiStream.addLastStream(chunkStream); } if (output == null) { - output = outputStream(firstRule.getDriver().filterResponse(request, inputStream(multiStream))); + log.info("addLastChunk: detecting charset using "+charsetDetector.getClass().getSimpleName()); + final BubbleCharSet cs = getCharSet(true); + log.info("addLastChunk: detected charset: "+cs); + final Charset charset; + if (cs == null) { + log.warn(prefix("addLastChunk")+"no charset could be determined"); + charset = null; + } else { + charset = cs.getCharset(); + } + output = outputStream(firstRule.getDriver().filterResponse(request, inputStream(multiStream), charset)); + } + } + + public BubbleCharSet getCharSet(boolean last) throws IOException { + try { + multiStream.mark((int) totalBytesWritten); + @Cleanup final InputStream in = inputStream(multiStream); + return charsetDetector.getCharSet(in, totalBytesWritten, last); + } finally { + multiStream.reset(); } } @@ -211,7 +239,7 @@ class ActiveStreamState { if (log.isDebugEnabled()) log.debug(prefix+"identity encoding, returning baseStream unmodified"); return baseStream; - } else if (doNotWrap.containsKey(url)) { + } else if (url == null || doNotWrap.containsKey(url)) { if (log.isDebugEnabled()) log.debug(prefix+"previous error wrapping encoding, returning baseStream unmodified"); encoding = null; return baseStream; diff --git a/bubble-server/src/main/java/bubble/service/stream/StandardRuleEngineService.java b/bubble-server/src/main/java/bubble/service/stream/StandardRuleEngineService.java index 10fedbca..dc502074 100644 --- a/bubble-server/src/main/java/bubble/service/stream/StandardRuleEngineService.java +++ b/bubble-server/src/main/java/bubble/service/stream/StandardRuleEngineService.java @@ -18,6 +18,8 @@ import bubble.resources.stream.FilterMatchersRequest; import bubble.rule.AppRuleDriver; import bubble.rule.FilterMatchDecision; import bubble.server.BubbleConfiguration; +import bubble.service.stream.charset.BubbleCharSet; +import bubble.service.stream.charset.CharsetDetector; import lombok.Cleanup; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -51,6 +53,7 @@ import javax.ws.rs.core.Response; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -64,7 +67,8 @@ import static java.util.concurrent.TimeUnit.MINUTES; import static javax.ws.rs.core.HttpHeaders.CONTENT_LENGTH; import static org.apache.http.HttpHeaders.CONTENT_TYPE; import static org.apache.http.HttpHeaders.TRANSFER_ENCODING; -import static org.cobbzilla.util.daemon.ZillaRuntime.*; +import static org.cobbzilla.util.daemon.ZillaRuntime.empty; +import static org.cobbzilla.util.daemon.ZillaRuntime.hashOf; import static org.cobbzilla.util.http.HttpStatusCodes.OK; import static org.cobbzilla.util.json.JsonUtil.COMPACT_MAPPER; import static org.cobbzilla.util.json.JsonUtil.json; @@ -141,7 +145,17 @@ public class StandardRuleEngineService implements RuleEngineService { // filter response. when stream is closed, close http client final Header contentTypeHeader = proxyResponse.getFirstHeader(CONTENT_TYPE); filterRequest.setContentType(contentTypeHeader == null ? null : contentTypeHeader.getValue()); - final InputStream responseEntity = firstRule.getDriver().filterResponse(filterRequest, new HttpClosingFilterInputStream(httpClient, proxyResponse)); + final InputStream in = new HttpClosingFilterInputStream(httpClient, proxyResponse); + + // do we have a content length? + final Header contentLengthHeader = proxyResponse.getFirstHeader(CONTENT_LENGTH); + final Long contentLength = contentLengthHeader == null ? null : Long.parseLong(contentLengthHeader.getValue()); + filterRequest.setContentLength(contentLength); + + final CharsetDetector charsetDetector = CharsetDetector.charSetDetectorForContentType(filterRequest.getContentType()); + final BubbleCharSet cs = charsetDetector.getCharSet(in, contentLength != null ? contentLength : 1024, true); + final Charset charset = cs == null ? null : cs.getCharset(); + final InputStream responseEntity = firstRule.getDriver().filterResponse(filterRequest, in, charset); // send response return sendResponse(responseEntity, proxyResponse); diff --git a/bubble-server/src/main/java/bubble/service/stream/StreamConstants.java b/bubble-server/src/main/java/bubble/service/stream/StreamConstants.java new file mode 100644 index 00000000..55e3c471 --- /dev/null +++ b/bubble-server/src/main/java/bubble/service/stream/StreamConstants.java @@ -0,0 +1,11 @@ +package bubble.service.stream; + +import org.cobbzilla.util.system.Bytes; + +public class StreamConstants { + + // do not wrap input with encoding stream until we have received at least this many bytes + // this avoids errors when creating a GZIPInputStream when only one or a few bytes are available + public static final long MIN_BYTES_BEFORE_WRAP = Bytes.KB; + +} diff --git a/bubble-server/src/main/java/bubble/service/stream/charset/BubbleCharSet.java b/bubble-server/src/main/java/bubble/service/stream/charset/BubbleCharSet.java new file mode 100644 index 00000000..f6ea017d --- /dev/null +++ b/bubble-server/src/main/java/bubble/service/stream/charset/BubbleCharSet.java @@ -0,0 +1,27 @@ +package bubble.service.stream.charset; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import java.nio.charset.Charset; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import static org.cobbzilla.util.string.StringUtil.UTF8cs; + +@AllArgsConstructor @ToString(of="charset") +public class BubbleCharSet { + + private static final Map cache = new ConcurrentHashMap<>(10); + + public static BubbleCharSet forCharSet(Charset cs) { + return cache.computeIfAbsent(cs, BubbleCharSet::new); + } + + public static final BubbleCharSet RAW = new BubbleCharSet(null); + public static final BubbleCharSet UTF8 = forCharSet(UTF8cs); + + @Getter private final Charset charset; + +} diff --git a/bubble-server/src/main/java/bubble/service/stream/charset/CharsetDetector.java b/bubble-server/src/main/java/bubble/service/stream/charset/CharsetDetector.java new file mode 100644 index 00000000..32f38610 --- /dev/null +++ b/bubble-server/src/main/java/bubble/service/stream/charset/CharsetDetector.java @@ -0,0 +1,23 @@ +package bubble.service.stream.charset; + +import java.io.InputStream; + +import static bubble.service.stream.charset.HtmlCharsetDetector.htmlCharSetDetector; +import static org.cobbzilla.util.http.HttpContentTypes.isHtml; + +public interface CharsetDetector { + + CharsetDetector SKIP_CHARSET_DETECTION = new SkipCharsetDetection(); + + static CharsetDetector charSetDetectorForContentType(String contentType) { + if (isHtml(contentType)) return htmlCharSetDetector(contentType); + return SKIP_CHARSET_DETECTION; + } + + BubbleCharSet getCharSet(InputStream in, long size, boolean last); + + class SkipCharsetDetection implements CharsetDetector { + @Override public BubbleCharSet getCharSet(InputStream in, long size, boolean last) { return BubbleCharSet.RAW; } + } + +} diff --git a/bubble-server/src/main/java/bubble/service/stream/charset/HtmlCharsetDetector.java b/bubble-server/src/main/java/bubble/service/stream/charset/HtmlCharsetDetector.java new file mode 100644 index 00000000..c037d200 --- /dev/null +++ b/bubble-server/src/main/java/bubble/service/stream/charset/HtmlCharsetDetector.java @@ -0,0 +1,43 @@ +package bubble.service.stream.charset; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.io.InputStream; +import java.nio.charset.Charset; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import static bubble.service.stream.charset.HtmlStreamCharsetDetector.HTML_STREAM_CHARSET_DETECTOR; + +@Slf4j +public abstract class HtmlCharsetDetector implements CharsetDetector { + + private static final Map detectors = new ConcurrentHashMap<>(10); + + public static final String CONTENT_TYPE_CHARSET = "charset="; + + public static CharsetDetector htmlCharSetDetector(String contentType) { + return detectors.computeIfAbsent(contentType, ct -> { + final int csPos = ct.indexOf(CONTENT_TYPE_CHARSET); + if (csPos == -1) return HTML_STREAM_CHARSET_DETECTOR; + final String charsetName = ct.substring(csPos + CONTENT_TYPE_CHARSET.length()); + try { + final Charset cs = Charset.forName(charsetName); + return new HtmlContentTypeCharSet(cs); + } catch (Exception e) { + log.error("htmlCharSetDetector: invalid charset, returning HtmlStreamCharsetDetector: "+charsetName); + return HTML_STREAM_CHARSET_DETECTOR; + } + }); + } + + @AllArgsConstructor + public static class HtmlContentTypeCharSet extends HtmlCharsetDetector { + private final Charset charset; + @Override public BubbleCharSet getCharSet(InputStream in, long size, boolean last) { + return BubbleCharSet.forCharSet(charset); + } + } + +} diff --git a/bubble-server/src/main/java/bubble/service/stream/charset/HtmlStreamCharsetDetector.java b/bubble-server/src/main/java/bubble/service/stream/charset/HtmlStreamCharsetDetector.java new file mode 100644 index 00000000..bc853304 --- /dev/null +++ b/bubble-server/src/main/java/bubble/service/stream/charset/HtmlStreamCharsetDetector.java @@ -0,0 +1,92 @@ +package bubble.service.stream.charset; + +import lombok.extern.slf4j.Slf4j; + +import java.io.InputStream; +import java.nio.charset.Charset; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static bubble.service.stream.StreamConstants.MIN_BYTES_BEFORE_WRAP; +import static org.cobbzilla.util.daemon.ZillaRuntime.shortError; +import static org.cobbzilla.util.string.StringUtil.UTF8cs; + +@Slf4j +public class HtmlStreamCharsetDetector extends HtmlCharsetDetector { + + public static final HtmlStreamCharsetDetector HTML_STREAM_CHARSET_DETECTOR = new HtmlStreamCharsetDetector(); + + private static final Pattern HTML_CONTENT_TYPE_EQUIV_CHARSET + = Pattern.compile("", Pattern.CASE_INSENSITIVE); + + private static final Pattern HTML_META_CHARSET + = Pattern.compile("", Pattern.CASE_INSENSITIVE); + + private static final Pattern HTML_CLOSE_HEAD + = Pattern.compile("]*>", Pattern.CASE_INSENSITIVE); + + @Override public BubbleCharSet getCharSet(InputStream in, long size, boolean last) { + final byte[] buffer = new byte[(int) MIN_BYTES_BEFORE_WRAP]; + int count; + String fullData = null; + try { + final StringBuilder b = new StringBuilder(); + int bytesRead = 0; + boolean zeroRead = false; + while (bytesRead < size && (count = in.read(buffer, 0, readSize(size, buffer.length, bytesRead))) != -1) { + if (count == 0) { + // reached end of multi-stream, if this is our second zero read, bail out + if (zeroRead) { + if (last) { + if (log.isDebugEnabled()) log.debug("getCharSet: exhausted stream and no match found, returning UTF-8"); + return BubbleCharSet.UTF8; + } + if (log.isDebugEnabled()) log.debug("getCharSet: two zero reads, must be at end of multi-stream, returning null"); + return null; + } + zeroRead = true; + } + final String data = new String(buffer, 0, count); + b.append(data); + fullData = b.toString(); + final Matcher metaMatcher = HTML_META_CHARSET.matcher(fullData); + if (metaMatcher.find()) { + return BubbleCharSet.forCharSet(safeCharSet(metaMatcher.group(1))); + } + final Matcher equivMatcher = HTML_CONTENT_TYPE_EQUIV_CHARSET.matcher(fullData); + if (equivMatcher.find()) { + return BubbleCharSet.forCharSet(safeCharSet(equivMatcher.group(1))); + } + final Matcher headCloseMatcher = HTML_CLOSE_HEAD.matcher(fullData); + if (headCloseMatcher.find()) { + if (log.isDebugEnabled()) log.debug("getCharSet: found head closing tag before any charset specifier, returning UTF-8"); + return BubbleCharSet.UTF8; + } + } + if (last) { + if (log.isDebugEnabled()) log.debug("getCharSet: exhausted stream and no match found, returning UTF-8"); + return BubbleCharSet.UTF8; + } + if (log.isDebugEnabled()) log.debug("getCharSet: exhausted stream and no match found, but more data may be coming, returning null"); + return null; + + } catch (Exception e) { + log.error("getCharSet: io error, returning UTF-8: "+shortError(e)); + return BubbleCharSet.UTF8; + } + } + + private Charset safeCharSet(String csName) { + try { + return Charset.forName(csName); + } catch (Exception e) { + log.error("safeCharSet: invalid name, returning UTF-8: "+csName); + return UTF8cs; + } + } + + private int readSize(long size, int bufsiz, int bytesRead) { + return bytesRead + bufsiz < size ? bufsiz : (int) (bufsiz - (size - bytesRead)); + } + +} diff --git a/bubble-server/src/test/java/bubble/test/filter/CharsetDetectionTest.java b/bubble-server/src/test/java/bubble/test/filter/CharsetDetectionTest.java new file mode 100644 index 00000000..1d349618 --- /dev/null +++ b/bubble-server/src/test/java/bubble/test/filter/CharsetDetectionTest.java @@ -0,0 +1,138 @@ +package bubble.test.filter; + +import bubble.model.app.AppMatcher; +import bubble.model.app.AppRule; +import bubble.resources.stream.FilterHttpRequest; +import bubble.resources.stream.FilterMatchersRequest; +import bubble.resources.stream.FilterMatchersResponse; +import bubble.service.stream.ActiveStreamState; +import bubble.service.stream.AppRuleHarness; +import org.apache.commons.io.IOUtils; +import org.cobbzilla.util.collection.SingletonList; +import org.cobbzilla.util.http.HttpContentEncodingType; +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; + +import static org.cobbzilla.util.http.HttpContentEncodingType.*; +import static org.cobbzilla.util.http.HttpContentTypes.TEXT_HTML; +import static org.cobbzilla.util.io.StreamUtil.stream2bytes; +import static org.cobbzilla.util.security.ShaUtil.sha256_base64; +import static org.junit.Assert.*; + +public class CharsetDetectionTest { + + public static final byte[] WIN_1250_TEST = stream2bytes("charset_detection/meta-windows-1250.html"); + public static final byte[] WIN_1250_LATE_TEST = stream2bytes("charset_detection/meta-windows-1250-late.html"); + public static final byte[] WIN_1250_EQUIV_TEST = stream2bytes("charset_detection/equiv-windows-1250.html"); + + @Test public void testNonUTF8Charset () throws Exception { + // read first chunk exactly 288 bytes, so it ends in the middle of "charset" + _testNonUTF8Charset(WIN_1250_TEST, 288, null); + } + + @Test public void testNonUTF8Charset_gzip () throws Exception { + // for gzip we won't be able to break exactly on charset, + // but try a small read anyway to make sure nothing breaks + _testNonUTF8Charset(gzip.encode(WIN_1250_TEST), 288, gzip); + } + + @Test public void testNonUTF8CharsetLate () throws Exception { + _testNonUTF8Charset(WIN_1250_LATE_TEST, 1024, null); + } + + @Test public void testNonUTF8CharsetLate_brotli () throws Exception { + _testNonUTF8Charset(br.encode(WIN_1250_LATE_TEST), 1024, br); + } + + @Test public void testNonUTF8CharsetEquiv () throws Exception { + _testNonUTF8Charset(WIN_1250_EQUIV_TEST, 1024, null); + } + + @Test public void testNonUTF8CharsetEquiv_deflate () throws Exception { + _testNonUTF8Charset(deflate.encode(WIN_1250_EQUIV_TEST), 1024, deflate); + } + + private void _testNonUTF8Charset(byte[] test, int initialReadSize, HttpContentEncodingType encoding) throws Exception { + final FilterHttpRequest request = new FilterHttpRequest() + .setMatchersResponse(new FilterMatchersResponse() + .setMatchers(new SingletonList<>(new AppMatcher())) + .setRequest(new FilterMatchersRequest() + .setFqdn("example.com") + .setUri("/test_"+sha256_base64(test)+".html"))) + .setContentType(TEXT_HTML) + .setEncoding(encoding); + final List rules = new ArrayList<>(); + final PassthruDriver driver = new PassthruDriver(); + final AppRuleHarness passthruRuleHarness = passthruRuleHarness(driver); + rules.add(passthruRuleHarness); + + final ActiveStreamState streamState = new ActiveStreamState(request, rules); + + final byte[] buffer = new byte[8192]; + final ByteArrayInputStream in = new ByteArrayInputStream(test); + final ByteArrayOutputStream out = new ByteArrayOutputStream(test.length); + + // add first chunk, no charset yet found + final byte[] buf = new byte[8192]; + final int initialActualRead = in.read(buffer, 0, initialReadSize); + assertEquals("expected first read to read "+initialReadSize+"bytes", initialReadSize, initialActualRead); + System.arraycopy(buffer, 0, buf, 0, initialReadSize); + streamState.addChunk(new ByteArrayInputStream(buf, 0, initialReadSize), initialReadSize); + Charset charset = driver.getLastSeenCharset(); + assertNull("expected no charset to be found in the first chunk", charset); + + // do not expect to have found a charset yet + InputStream response = streamState.getResponseStream(false); + IOUtils.copyLarge(response, out); + + // add remaining chunks, while reading data back + int count; + Charset lastSeenCharset = null; + int responseCount = 0; + while ((count = in.read(buffer)) != -1) { + System.arraycopy(buffer, 0, buf, 0, count); + streamState.addChunk(new ByteArrayInputStream(buf, 0, count), count); + response = streamState.getResponseStream(false); + responseCount++; + charset = driver.getLastSeenCharset(); + if (charset != null) { + if (lastSeenCharset == null) { + lastSeenCharset = charset; + } else { + // charset cannot change + assertEquals("expected charset to be same as lastSeenCharset", lastSeenCharset, charset); + } + // charset must be windows-1250 + assertEquals("expected windows-1250 charset", "windows-1250", charset.name()); + } + IOUtils.copyLarge(response, out); + } + assertNotNull("expected to find a charset", lastSeenCharset); + assertEquals("expected windows-1250 charset", "windows-1250", lastSeenCharset.name()); + + // add last empty chunk + streamState.addLastChunk(new ByteArrayInputStream(new byte[0]), 0); + + // read the data back + response = streamState.getResponseStream(true); + IOUtils.copyLarge(response, out); + + final byte[] actualBytes = out.toByteArray(); + final String expectedHtml = new String(encoding == null ? test : encoding.decode(test), lastSeenCharset); + final String actualHtml = new String(encoding == null ? actualBytes : encoding.decode(actualBytes), lastSeenCharset); + assertEquals("expected output to be same as input", expectedHtml, actualHtml); + } + + private AppRuleHarness passthruRuleHarness(PassthruDriver driver) { + final AppRuleHarness appRuleHarness = new AppRuleHarness(new AppMatcher(), new AppRule()); + appRuleHarness.setDriver(driver); + return appRuleHarness; + } + +} diff --git a/bubble-server/src/test/java/bubble/test/filter/PassthruDriver.java b/bubble-server/src/test/java/bubble/test/filter/PassthruDriver.java new file mode 100644 index 00000000..a962b0c2 --- /dev/null +++ b/bubble-server/src/test/java/bubble/test/filter/PassthruDriver.java @@ -0,0 +1,21 @@ +package bubble.test.filter; + +import bubble.resources.stream.FilterHttpRequest; +import bubble.rule.AbstractAppRuleDriver; +import lombok.Getter; + +import java.io.InputStream; +import java.nio.charset.Charset; + +public class PassthruDriver extends AbstractAppRuleDriver { + + @Getter private Charset lastSeenCharset; + + @Override public InputStream doFilterResponse(FilterHttpRequest filterRequest, InputStream in, Charset charset) { + this.lastSeenCharset = charset; + return super.doFilterResponse(filterRequest, in, charset); + } + + @Override public boolean couldModify(FilterHttpRequest request) { return true; } + +} diff --git a/bubble-server/src/test/resources/charset_detection/equiv-windows-1250.html b/bubble-server/src/test/resources/charset_detection/equiv-windows-1250.html new file mode 100644 index 00000000..a354e6cb --- /dev/null +++ b/bubble-server/src/test/resources/charset_detection/equiv-windows-1250.html @@ -0,0 +1,2552 @@ + + + + + + + + + + Example.local using Windows-1250 text encoding + + +a8e04adc-fc34-11ea-871e-cf879e8aa41d +a8e07e80-fc34-11ea-937b-7fe01851f53c +a8e0ae00-fc34-11ea-9862-bb138458428d +a8e0e028-fc34-11ea-bf81-2fd0e36323b3 +a8e10ec2-fc34-11ea-8bb3-5babf224dfec +a8e13bb8-fc34-11ea-a6a9-2f952ac24f48 +a8e16d68-fc34-11ea-9a43-03abb9c3a161 +a8e19c8e-fc34-11ea-a7de-43467c6facfe +a8e1cd80-fc34-11ea-9a14-bf5363ecbbb6 +a8e20138-fc34-11ea-b4d1-bf7643261884 +a8e2343c-fc34-11ea-83b9-a372f40effc3 +a8e274e2-fc34-11ea-9a1d-bb0047af455d +a8e2acb4-fc34-11ea-9c58-8b2d90b21f52 +a8e2ebc0-fc34-11ea-8565-dfee75e17960 +a8e31f3c-fc34-11ea-bde1-13677bfb5926 +a8e3525e-fc34-11ea-988c-ffe4ae297a3c +a8e387ba-fc34-11ea-a1ae-03f43e79569b +a8e3bef6-fc34-11ea-a079-e78a11603b05 +a8e3eec6-fc34-11ea-a3fd-c763a8313b0e +a8e41e82-fc34-11ea-9e68-2f0fc7bf6c8c +a8e450e6-fc34-11ea-a15d-ef5194a356a2 +a8e489a8-fc34-11ea-b121-6f829f9daa25 +a8e4ba40-fc34-11ea-8c29-eb4aec42fe7a +a8e4e7d6-fc34-11ea-afeb-2f9b49e9dd2d +a8e514ea-fc34-11ea-8460-db20fd444f94 +a8e558e2-fc34-11ea-8fc1-075d38d4efb3 +a8e593b6-fc34-11ea-b2ba-8740223fd8f8 +a8e5dd1c-fc34-11ea-90ba-fb5748d7eac0 +a8e64a7c-fc34-11ea-bdb9-6b7e8069143f +a8e68cc6-fc34-11ea-976b-27f4ca521c4c +a8e6be80-fc34-11ea-b655-87bed243253e +a8e6ece8-fc34-11ea-80b5-e36353450fb7 +a8e718a8-fc34-11ea-bab9-1b45f6beadbf +a8e74bac-fc34-11ea-a8c2-1b9fe976f51e +a8e780b8-fc34-11ea-bfc4-1b6abd9f3ec8 +a8e7ab56-fc34-11ea-8559-87c2b0598b1a +a8e7d9dc-fc34-11ea-a97c-3f1db496c34f +a8e8133e-fc34-11ea-bd29-c75ff04cdbba +a8e83742-fc34-11ea-8355-1f233c72876e +a8e85934-fc34-11ea-b7dc-4fd67d4f92b7 +a8e87824-fc34-11ea-bb3f-5f3c86590b94 +a8e89638-fc34-11ea-87d1-7f39e18e8d48 +a8e8b4c4-fc34-11ea-b299-931361dba8ee +a8e8d1ac-fc34-11ea-aeaf-17b78f4d0923 +a8e8f3ee-fc34-11ea-b90a-cf1720d23172 +a8e91806-fc34-11ea-b645-ef78fbdff129 +a8e93764-fc34-11ea-b0b8-33fc9bbf9596 +a8e95e7e-fc34-11ea-83d8-4f6cc7c7d0aa +a8e97f1c-fc34-11ea-9349-03907479172a +a8e9a26c-fc34-11ea-b720-d7d0d24cb2c0 +a8e9cd96-fc34-11ea-acc2-4777381c0eb4 +a8e9ee52-fc34-11ea-b5ea-77ad38731fc3 +a8ea1166-fc34-11ea-af35-a3c1813404cb +a8ea3056-fc34-11ea-8686-dfa1657d182c +a8ea5162-fc34-11ea-9964-f7e6d2d619d5 +a8ea7f0c-fc34-11ea-a804-4f4500b35de6 +a8eab3be-fc34-11ea-a5f7-3fffef05b852 +a8eae7d0-fc34-11ea-a4aa-d3f64f9ea285 +a8eb1476-fc34-11ea-9df4-033a02abcaf9 +a8eb337a-fc34-11ea-9a41-03d06667c4c7 +a8eb50da-fc34-11ea-bfc2-87feaba3d87b +a8eb70c4-fc34-11ea-a88e-47e0d6b95432 +a8eb9676-fc34-11ea-b539-6fe90bb2192c +a8ebbc1e-fc34-11ea-823d-5b5a35e6ae46 +a8ebe126-fc34-11ea-81ba-e359a254de92 +a8ec0408-fc34-11ea-92be-2b0a36ceb5b2 +a8ec2618-fc34-11ea-885d-8b0a885bd5af +a8ec494a-fc34-11ea-841f-af23e5312e03 +a8ec6772-fc34-11ea-bc7a-cfe098c519f2 +a8ec86da-fc34-11ea-8819-6b3b4a6f068f +a8eca444-fc34-11ea-a69a-cf31c97644c9 +a8ecc1f4-fc34-11ea-b122-9fb9d7995848 +a8ecdfae-fc34-11ea-9b4c-3315b4d83847 +a8ecfe62-fc34-11ea-b095-4fc5c01fe695 +a8ed1b40-fc34-11ea-a4ac-af8478e98cfc +a8ed381e-fc34-11ea-aebf-4fed988d5da5 +a8ed54f2-fc34-11ea-a6eb-f3398cfb3df3 +a8ed71b2-fc34-11ea-bafe-e7ac34d8bcc3 +a8ed923c-fc34-11ea-aafd-d790b4ec1461 +a8edb082-fc34-11ea-8cab-bb3b61f4aef3 +a8edcdba-fc34-11ea-8733-ab533a82bde8 +a8edf150-fc34-11ea-a09d-573e44acd5c6 +a8ee14a0-fc34-11ea-8e07-773653ea9f15 +a8ee35de-fc34-11ea-82e5-4ffdc6523c27 +a8ee5a0a-fc34-11ea-9a77-6772bfbc1db7 +a8ee7936-fc34-11ea-b1e2-3f85d01c5723 +a8ee9c72-fc34-11ea-8067-d7f4b29acaef +a8eebfe0-fc34-11ea-92ac-a3bfe0646661 +a8eedfb6-fc34-11ea-9f6d-e7342f75d0a8 +a8eefce4-fc34-11ea-a6ab-6b78097ca2ed +a8ef1cb0-fc34-11ea-ae8c-7bc991fbe9a8 +a8ef3b3c-fc34-11ea-9522-c788c152b482 +a8ef5900-fc34-11ea-ac97-57ca3c08dfe7 +a8ef7692-fc34-11ea-9055-4f070d1c2fb3 +a8ef951e-fc34-11ea-9e88-afb7a9538c5d +a8efb36e-fc34-11ea-9dfb-bb2e316afea2 +a8efcf52-fc34-11ea-82dd-efba2aa0a291 +a8efed3e-fc34-11ea-8268-4f8b24b2c17a +a8f00b16-fc34-11ea-a0e5-83964f954810 +a8f026aa-fc34-11ea-8ba3-6b3b24505944 +a8f04310-fc34-11ea-b561-7777fe7dec9b +a8f05f12-fc34-11ea-b175-538185bfcb85 +a8f07aa6-fc34-11ea-8f4b-3f84ec120699 +a8f09a7c-fc34-11ea-aaa8-5bc1c3757147 +a8f0bcb4-fc34-11ea-9ca2-33bd58e17b61 +a8f0df64-fc34-11ea-9c1e-9f8a81aa56f1 +a8f0ff44-fc34-11ea-a0b5-773a5ad4acc8 +a8f11e98-fc34-11ea-9811-df39d88566a5 +a8f13d92-fc34-11ea-ab9b-d3e821003a00 +a8f15b7e-fc34-11ea-93c1-d36257e2a893 +a8f179e2-fc34-11ea-a9b5-afe32ecb804e +a8f198c8-fc34-11ea-90ac-874e37ab50b3 +a8f1b98e-fc34-11ea-bafc-47298e3c4ef5 +a8f1db4e-fc34-11ea-ae75-7fb6e94ea8e3 +a8f1f962-fc34-11ea-8043-bf01d2557a5f +a8f21992-fc34-11ea-b680-af271c33b109 +a8f2376a-fc34-11ea-b412-f7ac5e971c82 +a8f258e4-fc34-11ea-9695-0f2b23673772 +a8f2796e-fc34-11ea-a92b-ebcb77d570f9 +a8f2993a-fc34-11ea-9a9f-3bf731340eee +a8f2b6a4-fc34-11ea-a0e2-7b85d1a628a0 +a8f2d616-fc34-11ea-8c0d-bb10ac341225 +a8f2f3c6-fc34-11ea-ba2c-47af5e86c02e +a8f31220-fc34-11ea-a857-8b3ae4e18c62 +a8f331d8-fc34-11ea-beaf-e7a196691f96 +a8f35064-fc34-11ea-8224-7f75cd6f5335 +a8f36ee6-fc34-11ea-be69-2b08a684fcfa +a8f38f66-fc34-11ea-b135-0b673fddc3d3 +a8f3af3c-fc34-11ea-a517-3b1f6ba9e4d5 +a8f3ce4a-fc34-11ea-8827-7f575606d4bc +a8f3f528-fc34-11ea-baa3-3371270b266b +a8f4156c-fc34-11ea-8ff2-973aebc5e7f9 +a8f43178-fc34-11ea-90dd-1b69353bdf4a +a8f45392-fc34-11ea-b9da-9fba59b5f205 +a8f47160-fc34-11ea-b1f3-f7beabb9eaba +a8f48fc4-fc34-11ea-b06b-2f7eebe66d99 +a8f4ad1a-fc34-11ea-adbb-3fc42cd68689 +a8f4cb24-fc34-11ea-9f38-5b3e1022d02e +a8f4e96a-fc34-11ea-8b3a-3764ab340dde +a8f50896-fc34-11ea-9c56-1b33f7d3ad5d +a8f5268c-fc34-11ea-8e40-e3f0139704bd +a8f54496-fc34-11ea-bf6b-47ee3c476689 +a8f562f0-fc34-11ea-9b10-9382b5e0d54c +a8f580e6-fc34-11ea-bd47-a7e6a79c62b9 +a8f59bbc-fc34-11ea-9662-6feeb0498484 +a8f5ba34-fc34-11ea-81db-871a0945f917 +a8f5d8b6-fc34-11ea-a79e-8fce9911cb46 +a8f5f936-fc34-11ea-b57b-c31a9537d7f8 +a8f61e2a-fc34-11ea-a9bf-97d8967d6176 +a8f63f72-fc34-11ea-a80c-03f19ed96196 +a8f65dfe-fc34-11ea-85bf-2fefca57504e +a8f67d02-fc34-11ea-a033-f73e73c79983 +a8f69abc-fc34-11ea-b85a-63a06c4c7441 +a8f6b8d0-fc34-11ea-8048-fb0beb6788af +a8f6d78e-fc34-11ea-a45d-db09a730fab3 +a8f6f4a8-fc34-11ea-9344-57d69b3cebce +a8f71316-fc34-11ea-8dd9-7bff549b2e5b +a8f73346-fc34-11ea-9dae-07ba3c9f32eb +a8f75326-fc34-11ea-be60-c3d1e15dc426 +a8f770fe-fc34-11ea-bdfe-f7af652cca57 +a8f78ec2-fc34-11ea-bb9f-3762899e6bf3 +a8f7add0-fc34-11ea-b303-df07fc847946 +a8f7cf18-fc34-11ea-bbfa-2f8b144916bf +a8f7ee08-fc34-11ea-a74f-6754b7031145 +a8f80cd0-fc34-11ea-a485-33a96c7ac559 +a8f82e2c-fc34-11ea-a060-fb60f054364a +a8f84b82-fc34-11ea-a5d4-0f453475e465 +a8f86a9a-fc34-11ea-81bd-7fa584fab0f0 +a8f88cf0-fc34-11ea-9ad0-ef3ec11a8cf0 +a8f8abe0-fc34-11ea-891c-3391ecc4c163 +a8f8cada-fc34-11ea-8e63-ebea91a10c1c +a8f8eab0-fc34-11ea-94b0-2f18cb5f7c3a +a8f908d8-fc34-11ea-97ab-5ba8c17da4c3 +a8f92b60-fc34-11ea-a42f-c3dfe95c84b7 +a8f94a00-fc34-11ea-95b6-a7703082b861 +a8f96896-fc34-11ea-b0ec-f35a46eac0a7 +a8f986c8-fc34-11ea-b704-fb4aa31d9232 +a8f9a4dc-fc34-11ea-b629-e348d62ad485 +a8f9c458-fc34-11ea-b838-471d5304cac6 +a8f9e384-fc34-11ea-88aa-a73d64f4ff94 +a8fa013e-fc34-11ea-a49b-1b2d0cfca1d4 +a8fa209c-fc34-11ea-b5fe-b799f9ae695c +a8fa3d20-fc34-11ea-95e3-e31740a35040 +a8fa5918-fc34-11ea-86a3-a7bc1857bacd +a8fa76fa-fc34-11ea-8266-074097440a20 +a8fa95d6-fc34-11ea-aae6-a342563f4b43 +a8fab91c-fc34-11ea-8119-63afe4adba87 +a8fad9d8-fc34-11ea-adc6-df37918a4242 +a8fafba2-fc34-11ea-899e-4fd1c008f938 +a8fb1ee8-fc34-11ea-9e4d-2fe05be1b250 +a8fb3ec8-fc34-11ea-b5a4-2b1c1d62d392 +a8fb5cdc-fc34-11ea-a888-431cce0ae1b0 +a8fb8176-fc34-11ea-ae08-b3569a73a60e +a8fba0de-fc34-11ea-8d6b-f79697c530fc +a8fbc118-fc34-11ea-b21a-5b30c4352bdb +a8fbe166-fc34-11ea-9a10-8b17126573ec +a8fc0088-fc34-11ea-b7a2-cb01fadfc47d +a8fc1e56-fc34-11ea-ba16-dbb6261fd981 +a8fc3eae-fc34-11ea-88b7-5bfe515fadc2 +a8fc5c36-fc34-11ea-905b-bba4d1adda87 +a8fc7950-fc34-11ea-ab4b-c343abb58490 +a8fc969c-fc34-11ea-bccb-af220ed0ea3a +a8fcb640-fc34-11ea-b893-abf83ea5b380 +a8fcd63e-fc34-11ea-94ff-4f03386de38d +a8fcf510-fc34-11ea-8630-933c0fe261e5 +a8fd1388-fc34-11ea-bdd4-676bf339f8f7 +a8fd308e-fc34-11ea-a54d-234439bc42f4 +a8fd4d12-fc34-11ea-93e4-5f7a784cc946 +a8fd6e14-fc34-11ea-90da-d3b8b371015a +a8fd8aac-fc34-11ea-94a2-2b435d663f4a +a8fdaf0a-fc34-11ea-b349-b739edc4252e +a8fdd084-fc34-11ea-824b-e38039771c6c +a8fdf0e6-fc34-11ea-a682-63489442383e +a8fe11ac-fc34-11ea-935d-cb525636a809 +a8fe306a-fc34-11ea-9b08-3b967017775d +a8fe4e60-fc34-11ea-9e86-fb3b27a6d2a3 +a8fe6c24-fc34-11ea-81f1-a7d4ac76df29 +a8fe8c04-fc34-11ea-958d-739625d699c0 +a8feab76-fc34-11ea-b52d-1719139e4119 +a8fec9c6-fc34-11ea-9be3-d3d39a53aec1 +a8fee668-fc34-11ea-8117-33179acfedf4 +a8ff04fe-fc34-11ea-a5c4-4b243755b4ae +a8ff248e-fc34-11ea-96bf-9fd09dc700b6 +a8ff42c0-fc34-11ea-a77f-d3184793bf29 +a8ff60b6-fc34-11ea-b3da-8f3823b132aa +a8ff7f10-fc34-11ea-afab-b7b706388fe8 +a8ff9e8c-fc34-11ea-9cfc-6bd365e537b1 +a8ffbc6e-fc34-11ea-b6a2-ab35ca6bc806 +a8ffdd16-fc34-11ea-b198-f7ff4be4a33e +a8fffe36-fc34-11ea-956e-67d3d471103a +a900230c-fc34-11ea-a3ba-8f679a17adee +a9004404-fc34-11ea-98ad-df87b11efac7 +a90062d6-fc34-11ea-a3d8-9791cd3cafd9 +a90085fe-fc34-11ea-a6ed-0f1b321aae82 +a900a818-fc34-11ea-939f-773e45dc9ab7 +a900c5fa-fc34-11ea-95b6-57ae0e3e5f9b +a900e35a-fc34-11ea-a9d8-57f7c64c9ca5 +a900ffca-fc34-11ea-8dd5-a7dfeceed25b +a9011d66-fc34-11ea-b99d-135e852661ed +a9013ba2-fc34-11ea-80ea-c3162a28ca4b +a90158ee-fc34-11ea-869f-2b58da9d679a +a90175ae-fc34-11ea-add4-e72b18fc6ac8 +a901969c-fc34-11ea-86c4-a33e277360b3 +a901b3de-fc34-11ea-a488-e7ed96ffd8a1 +a901d0b2-fc34-11ea-a3a5-bf7d9ab9c3ee +a901ef16-fc34-11ea-8735-13ffc6fa98e1 +a9020ce4-fc34-11ea-8854-f7709be2a767 +a9022cec-fc34-11ea-a7f4-f71e757293ed +a9024a6a-fc34-11ea-bb7d-7f4c55f17fe7 +a9026a2c-fc34-11ea-a8d0-93013391e1ca +a90288d6-fc34-11ea-b34b-5f24e1e99ab8 +a902a708-fc34-11ea-a073-77f1d3763f2a +a902c60c-fc34-11ea-b880-eff28e9a0779 +a902ea88-fc34-11ea-ad29-6f7eaa1c30ef +a9030b44-fc34-11ea-8281-ef527e98a4e1 +a90329ee-fc34-11ea-9eb9-a77317b0940a +a9034c94-fc34-11ea-9f3d-87d6820963a3 +a9036a3a-fc34-11ea-83dd-93e80db2b913 +a90389de-fc34-11ea-83fe-67c9c047051c +a903a766-fc34-11ea-b1a2-ebc289efc53d +a903c566-fc34-11ea-8831-5ba9ae1b5df7 +a903e0c8-fc34-11ea-8fff-cbbe0ce1d752 +a903fdb0-fc34-11ea-a79f-c769d42038d3 +a9041bf6-fc34-11ea-8283-abfd32897221 +a9043924-fc34-11ea-ac1d-6f50ecc32c30 +a904576a-fc34-11ea-aaff-1f5341b1fd9f +a90474ac-fc34-11ea-a90f-333c94d4827f +a90491b2-fc34-11ea-9632-471299e5f9ca +a904afda-fc34-11ea-9bad-ef10d3c42ca9 +a904cf24-fc34-11ea-9e24-7f9c62c24673 +a904ece8-fc34-11ea-808d-8bb149635caf +a9050ac0-fc34-11ea-8018-4f1c1eecd273 +a9052a00-fc34-11ea-b6c0-eb7c1c80d294 +a905497c-fc34-11ea-a4ec-0fbae182d41e +a9056880-fc34-11ea-9028-9b8f1e450ca8 +a905846e-fc34-11ea-922c-3f1106ac69ab +a905a4a8-fc34-11ea-9bc3-9beb4f7a8189 +a905c2f8-fc34-11ea-9d67-b717578759c7 +a905e260-fc34-11ea-b39b-93c98e863afd +a90601aa-fc34-11ea-938e-bf398e838fe2 +a9061ec4-fc34-11ea-b040-4f43aa2adfd4 +a9063c88-fc34-11ea-8d73-bb2223696f2c +a9065948-fc34-11ea-b1f8-7b9cb0a65272 +a9067842-fc34-11ea-a015-a3cbc29495e4 +a90698ae-fc34-11ea-a679-bb34a5e8e30e +a906b7da-fc34-11ea-b88d-7f74388792f1 +a906d5b2-fc34-11ea-ae2f-6f2b12dc260c +a906f3e4-fc34-11ea-928a-bb3232c8e108 +a90712ca-fc34-11ea-9984-d3b686120705 +a9073192-fc34-11ea-8015-d70b78816cdf +a9074f7e-fc34-11ea-ba98-c33089e5925f +a90771de-fc34-11ea-8b6f-2fb8f4bff1cf +a9079286-fc34-11ea-b922-b32eb4c4cb90 +a907b70c-fc34-11ea-91e0-4b6b6f62a02f +a907d91c-fc34-11ea-9a74-a34d24f7835c +a907f7ee-fc34-11ea-a2fd-37930e5b02e2 +a9081bde-fc34-11ea-bf59-735804b948fc +a9083e70-fc34-11ea-a9ae-cf4b9fcc2d84 +a9085e5a-fc34-11ea-a744-0f9fd717102f +a9087c8c-fc34-11ea-9ed8-a31bcbd10712 +a9089a14-fc34-11ea-a438-5becb0c2ce27 +a908b68e-fc34-11ea-a654-1bf0cff81e5f +a908d48e-fc34-11ea-be09-930076f1761b +a908f48c-fc34-11ea-9ff9-13bcc749c9c1 +a90912e6-fc34-11ea-b8cc-5b047f479d1b +a90930be-fc34-11ea-9fd0-13072b0fec0e +a9095080-fc34-11ea-828b-3f94672eba65 +a9096e12-fc34-11ea-ac62-070fe2fe4f8f +a9098c08-fc34-11ea-bb29-cbc249d6bc68 +a909a94a-fc34-11ea-8345-77f86e673c79 +a909c592-fc34-11ea-96f3-63cfb14f4f96 +a909e450-fc34-11ea-a737-43ec0bb2dcfe +a90a04ee-fc34-11ea-9708-af0e336b26b8 +a90a2780-fc34-11ea-8e83-2badc4494385 +a90a4896-fc34-11ea-b01a-274db17acbd1 +a90a67fe-fc34-11ea-8517-d3ccc56a36af +a90a8a86-fc34-11ea-8414-eb8de413bd6b +a90aab56-fc34-11ea-861e-2f1158516099 +a90acbc2-fc34-11ea-8d88-573926ab836f +a90aea76-fc34-11ea-8281-c7d75f5ed94e +a90b07ea-fc34-11ea-8b8e-67270b804e97 +a90b2536-fc34-11ea-bd77-d73b16b1832b +a90b408e-fc34-11ea-b1f3-8fb39b01a07b +a90b5f88-fc34-11ea-8959-bb8bfe8f118f +a90b7d38-fc34-11ea-8dc8-c7a1e2ee6628 +a90b996c-fc34-11ea-8713-bb2547c2f608 +a90bb758-fc34-11ea-b54b-43fea9090700 +a90bd472-fc34-11ea-8f19-0f5053305d95 +a90bf240-fc34-11ea-856d-874ec96e8517 +a90c1220-fc34-11ea-b80c-4fcaa1f9baba +a90c2e90-fc34-11ea-9c59-4b6b19ce84b4 +a90c4a9c-fc34-11ea-81a8-5be3b7df2481 +a90c68c4-fc34-11ea-a54a-6335ac4df3e9 +a90c84f8-fc34-11ea-a66e-8f6bce4915ee +a90ca26c-fc34-11ea-ad70-ef230de4349d +a90cbea0-fc34-11ea-80e2-b33dc1699c03 +a90cddcc-fc34-11ea-89e8-839c0432991a +a90d02a2-fc34-11ea-8c81-eb7e5446eac7 +a90d22e6-fc34-11ea-8bfa-e757a26dfa82 +a90d415e-fc34-11ea-9037-9f66980b50b0 +a90d5f90-fc34-11ea-b612-976ce0204316 +a90d7c0a-fc34-11ea-860b-c3c87bf883ae +a90d9938-fc34-11ea-8b29-a7aebf56ef33 +a90db99a-fc34-11ea-8ee4-4f1478ccde2b +a90dd808-fc34-11ea-91aa-6b08577b39b6 +a90df7d4-fc34-11ea-a1dd-677871661735 +a90e1520-fc34-11ea-aa08-e7ec09622692 +a90e3230-fc34-11ea-8587-9fa38d685881 +a90e4d6a-fc34-11ea-8338-33e7f326d026 +a90e6aac-fc34-11ea-8c87-73f5d7ff59d7 +a90e871c-fc34-11ea-b5ba-23afae4359f8 +a90ea580-fc34-11ea-8a1d-4bdf95167f26 +a90ec45c-fc34-11ea-87de-6b6a87aec61f +a90ee3f6-fc34-11ea-86a3-03d0ea6ff763 +a90f02e6-fc34-11ea-942e-5348b4593d9d +a90f24a6-fc34-11ea-8ebc-0fd8e82f00bc +a90f43be-fc34-11ea-b448-0b4457cb7a87 +a90f6326-fc34-11ea-8f07-c7d91abc8d45 +a90f841e-fc34-11ea-af99-238fefaddfaf +a90fa386-fc34-11ea-9aea-df50be628ac1 +a90fc6a4-fc34-11ea-8c29-57f26b20b4fa +a90fe6f2-fc34-11ea-98c4-7b2b9ef133ef +a9100786-fc34-11ea-8594-9b4f49877520 +a91024be-fc34-11ea-adb1-a3a70eb7151c +a91042dc-fc34-11ea-98f2-3ff2f81817a0 +a9106136-fc34-11ea-b0a9-931ee886d3dc +a9107ef0-fc34-11ea-b845-13014c6b8044 +a9109c78-fc34-11ea-9fed-f337db4545b7 +a910b852-fc34-11ea-a7f4-3fb597073d7a +a910d68e-fc34-11ea-87a4-17622f73163e +a910f3f8-fc34-11ea-bc4f-5399c70921eb +a91112c0-fc34-11ea-9f9f-c3be07c506cc +a9112fee-fc34-11ea-83ae-17b931b5e260 +a9114d6c-fc34-11ea-bc19-8377586d8a33 +a91169dc-fc34-11ea-bd5d-c7853fbce8ad +a9118674-fc34-11ea-a861-db768abc4640 +a911a3fc-fc34-11ea-b93e-c308019b631d +a911c3c8-fc34-11ea-a6f1-d7d46b68ac56 +a911e844-fc34-11ea-b228-d3d39aaafb81 +a91206f8-fc34-11ea-993b-03c00c5faaf2 +a912273c-fc34-11ea-a41b-333b44f1061f +a91245b4-fc34-11ea-ab7d-8f2f22a13998 +a9126508-fc34-11ea-9341-bf89c1ba439b +a91282e0-fc34-11ea-8a89-3b805528a9b7 +a9129e42-fc34-11ea-b4d4-531e9ea93120 +a912beae-fc34-11ea-b04d-4384e9c9debf +a912dcb8-fc34-11ea-9566-ab1a75170eda +a912f9a0-fc34-11ea-8692-5fda5fccddb6 +a9131854-fc34-11ea-9157-a7d67a10acbf +a9133816-fc34-11ea-8aa0-033b4e452e0b +a9135814-fc34-11ea-a150-cf407d873f31 +a9137574-fc34-11ea-a472-332ab5a58139 +a9139126-fc34-11ea-a1c3-c718ea3b0667 +a913afe4-fc34-11ea-9a1d-63c4a3efab90 +a913d30c-fc34-11ea-8e78-83785c3a5a21 +a913f102-fc34-11ea-9970-534818791732 +a9140eee-fc34-11ea-bd1f-233811440d52 +a9142d84-fc34-11ea-8aee-1b384e0e2521 +a9144c1a-fc34-11ea-b8c6-13b333608e75 +a91469fc-fc34-11ea-99cb-47d0e3ea90ac +a9148afe-fc34-11ea-b5f1-0758381ec56d +a914aa52-fc34-11ea-9184-f734182891e8 +a914c6d6-fc34-11ea-a7d9-cfc12cb37f05 +a914e724-fc34-11ea-95f0-3726ee119ece +a9150a60-fc34-11ea-98ec-275643b0b886 +a9152cf2-fc34-11ea-80c6-872b307ff148 +a9154bce-fc34-11ea-9f11-1f5443327211 +a9156abe-fc34-11ea-98d9-371860dcd87b +a9158b8e-fc34-11ea-b223-df0e39aeb801 +a915aaa6-fc34-11ea-b30a-5743d266600d +a915caae-fc34-11ea-870e-1b8434ffe3b0 +a915e994-fc34-11ea-8555-2bd32992fbba +a9160780-fc34-11ea-80a4-dfea112d9340 +a91626fc-fc34-11ea-bb2a-f7bbc9b00f2d +a916427c-fc34-11ea-b415-83d4f8ef67e1 +a91669e6-fc34-11ea-9a26-5bd65dc4dad6 +a9168804-fc34-11ea-bf63-43748dbcd555 +a916a668-fc34-11ea-9dc2-4bc03cf08b21 +a916c7f6-fc34-11ea-a072-0feaa724159d +a916e8c6-fc34-11ea-96ac-1307bc27ca15 +a9170c70-fc34-11ea-aec4-2342dde6aa1f +a9172df4-fc34-11ea-a341-a3bdd1c3f075 +a91752c0-fc34-11ea-89e8-d3e15c4c1f37 +a91772c8-fc34-11ea-9729-071aaabad301 +a91797da-fc34-11ea-ad89-b32a543aa2b1 +a917bae4-fc34-11ea-be32-a3e6ad09a2be +a917d8bc-fc34-11ea-a7a7-4b54e80c41db +a917f6c6-fc34-11ea-829c-2f35456dd70b +a918158e-fc34-11ea-9660-5307ef65ab6a +a91832d0-fc34-11ea-8f96-df3e68e1abfa +a9185120-fc34-11ea-a3f7-43c02b24a042 +a9186db8-fc34-11ea-9341-e33a8c459f66 +a9188b22-fc34-11ea-9690-834c57b19fb3 +a918a7a6-fc34-11ea-ba6e-d755f709eabc +a918c5c4-fc34-11ea-a217-5ff7fbc1bf49 +a918e4d2-fc34-11ea-9420-4f97fa7715b8 +a919011a-fc34-11ea-a206-7f264e00acf7 +a9191f06-fc34-11ea-b31a-df36cc1feb45 +a9193d38-fc34-11ea-8ed6-17d285390b51 +a9195b2e-fc34-11ea-9aa3-abd8bc5e42e0 +a9197b72-fc34-11ea-a485-fb717bba5e67 +a9199ab2-fc34-11ea-91de-bb0df768e2a1 +a919ba42-fc34-11ea-8772-b36a0e853c2f +a919d8c4-fc34-11ea-94f4-b30b44b7e73a +a919fad4-fc34-11ea-ade7-5f243bfc4cd8 +a91a1ce4-fc34-11ea-a017-fbab82068178 +a91a3b3e-fc34-11ea-a086-7f2a1f5172f4 +a91a58e4-fc34-11ea-90dd-6f4715ea9c1f +a91a7752-fc34-11ea-98b6-2bc02082990d +a91a9750-fc34-11ea-9be5-5796274c21a6 +a91ab51e-fc34-11ea-a41b-1fddac759e8a +a91ad404-fc34-11ea-9cc7-3b546c3351fd +a91af1e6-fc34-11ea-b8e2-b7d1893f7dc4 +a91b0e7e-fc34-11ea-8f40-73ef5f61c207 +a91b2cec-fc34-11ea-83ab-9b3a8efc5298 +a91b4902-fc34-11ea-86a2-f76e807cf91e +a91b67c0-fc34-11ea-ae7c-f3d1858b5281 +a91b85e8-fc34-11ea-9dd2-e363cff8719e +a91ba2d0-fc34-11ea-88fd-139ea05d6ae2 +a91bc120-fc34-11ea-bed6-ff46c0077ec7 +a91bdffc-fc34-11ea-82d2-232ee014b632 +a91bfe10-fc34-11ea-8964-a3ce0156773b +a91c1c6a-fc34-11ea-af7e-5371b1cf5cca +a91c40fa-fc34-11ea-925d-cfa056404112 +a91c608a-fc34-11ea-80fd-9f1a6650353d +a91c7fc0-fc34-11ea-b92a-0365adf2e84f +a91ca25c-fc34-11ea-ab9f-bb6352cd6be7 +a91cc174-fc34-11ea-b332-73113fd0b5a3 +a91cde84-fc34-11ea-a795-4b933a8e6797 +a91cfd74-fc34-11ea-9224-df151e879273 +a91d1d68-fc34-11ea-8837-e3f5dfbc2aab +a91d3f28-fc34-11ea-a93a-9f3b9da845c8 +a91d5b3e-fc34-11ea-b1ca-db18cd042f65 +a91d7920-fc34-11ea-b3cc-3375714c398d +a91d9842-fc34-11ea-afd4-0f30c6d9bfa9 +a91dba0c-fc34-11ea-93b3-3f9ff63d515d +a91dd82a-fc34-11ea-8a3b-c3964f08fa14 +a91df634-fc34-11ea-966c-13bfe69dae04 +a91e14ac-fc34-11ea-ac84-a3bd97f4921a +a91e3518-fc34-11ea-9ee2-afcdc2903082 +a91e53d6-fc34-11ea-98d2-db15c86660cb +a91e7820-fc34-11ea-978c-6f0d70d1c551 +a91e986e-fc34-11ea-95a4-b36ee7121d75 +a91eb858-fc34-11ea-9135-a3c8097a4e5b +a91edc48-fc34-11ea-ab2b-27a65278ef87 +a91efdb8-fc34-11ea-b021-4f121ae72c39 +a91f1d7a-fc34-11ea-b8bf-d3ea5fc87b9e +a91f4200-fc34-11ea-9828-0304dcfe73bd +a91f6172-fc34-11ea-8d1a-b31066b82b34 +a91f7fe0-fc34-11ea-8d3a-afd326f2a9b6 +a91f9c6e-fc34-11ea-8c3e-6722a1af472b +a91fb8b6-fc34-11ea-8a8e-e76d84db81fd +a91fd7a6-fc34-11ea-a67c-8373cb8f950d +a91ff4fc-fc34-11ea-8db9-ff40c1cf3114 +a9201298-fc34-11ea-b2ca-2f0540b32e15 +a92031c4-fc34-11ea-9f65-0be3f22bd20d +a9205212-fc34-11ea-a9b6-6779d6611f19 +a9207044-fc34-11ea-ae4b-d777c0cf9940 +a9208ec6-fc34-11ea-8381-4b0c94986567 +a920ab36-fc34-11ea-a39e-2331c56969c4 +a920c94a-fc34-11ea-991f-7f6f3a594a9f +a920e664-fc34-11ea-9fef-6776f5ac10a0 +a9210590-fc34-11ea-acbc-df8f483fbbb7 +a92123b8-fc34-11ea-90e4-2f7a223c0d37 +a92143a2-fc34-11ea-a08a-6f12cf6265d9 +a9216224-fc34-11ea-8ced-d7d1a36a8986 +a92183f8-fc34-11ea-ba76-cf0f73abb3bf +a921a0c2-fc34-11ea-a94e-0352020548a0 +a921c0ca-fc34-11ea-b37e-df7eb0eb5f53 +a921e0d2-fc34-11ea-9b02-872613fc74f9 +a921fd42-fc34-11ea-948a-672c7aea29b6 +a9221b2e-fc34-11ea-822c-b30b090a6a76 +a92239e2-fc34-11ea-9f95-eb688770292e +a92256d4-fc34-11ea-8a64-d32a308bacac +a92273c6-fc34-11ea-884a-ef083317a99b +a92293f6-fc34-11ea-ad3d-1b004db5aefa +a922b0ca-fc34-11ea-b09a-e71c65f30f28 +a922ce5c-fc34-11ea-815c-5bb0439b527d +a922ed74-fc34-11ea-aa48-4f265a9929ef +a9230ade-fc34-11ea-949b-5f94dbd62402 +a923279e-fc34-11ea-985d-fb5c14a4f007 +a9234436-fc34-11ea-81a7-7f72579caad5 +a9236182-fc34-11ea-8d4e-fb0f9399f2b7 +a9238554-fc34-11ea-8e0f-838f87f4d13b +a923a35e-fc34-11ea-ab2c-5f9eaf40c8de +a923c19a-fc34-11ea-aadf-c74971722075 +a923e10c-fc34-11ea-916f-433afbba0cd7 +a923fec6-fc34-11ea-b183-9b7246618dad +a9241e92-fc34-11ea-9b18-7f8c8c65690b +a9244354-fc34-11ea-a500-631fc0724039 +a9246488-fc34-11ea-8339-438f1ab1530c +a924845e-fc34-11ea-b4f4-275911f46a53 +a924a29a-fc34-11ea-8f27-171efdb331f0 +a924bf96-fc34-11ea-81ac-ff81eda63f5a +a924de04-fc34-11ea-9bc6-9b2e0903ee50 +a924fd62-fc34-11ea-8cf1-37d1e75b9fdc +a9251a40-fc34-11ea-a5ac-d3e791e5a754 +a925369c-fc34-11ea-aa10-53eab3f01124 +a925550a-fc34-11ea-8d8f-b354ae294e82 +a9257206-fc34-11ea-bada-df36fdeb27a3 +a9259042-fc34-11ea-ba4b-47808faf3500 +a925ad34-fc34-11ea-a3a1-6322a9c99ac7 +a925cc4c-fc34-11ea-a293-fb5afa16ad32 +a925ea24-fc34-11ea-9410-3b62dbc0c4c8 +a9260aae-fc34-11ea-92d4-27ceea1f5246 +a9262ffc-fc34-11ea-97f5-3b22d20545fa +a9264eb0-fc34-11ea-95e0-5bd01a37ee58 +a9266cb0-fc34-11ea-ba56-736a4e5cdbe2 +a9268f24-fc34-11ea-a09f-f73bc19e48e1 +a926b03a-fc34-11ea-8f19-1f2b040198ae +a926ce94-fc34-11ea-b2db-8bc0678e8e66 +a926eb18-fc34-11ea-8a38-778e879ee0fe +a9270846-fc34-11ea-a029-f756ad14cf00 +a9272664-fc34-11ea-ae5a-d7604621b308 +a9274392-fc34-11ea-b478-333a40128d9c +a9275f94-fc34-11ea-89c6-bfb5cd803433 +a9277ff6-fc34-11ea-bd62-1781e0bd74eb +a9279ef0-fc34-11ea-ae5a-bbd9ce5fb005 +a927bc64-fc34-11ea-9179-eb075fa8653c +a927daaa-fc34-11ea-b9ff-1f970ace1547 +a927f71a-fc34-11ea-a00c-2b6bbf090645 +a92812fe-fc34-11ea-a766-7f18cddebf10 +a92831d0-fc34-11ea-b6cd-333407d9f367 +a9284f94-fc34-11ea-aee9-a35768e89009 +a9286d94-fc34-11ea-8cae-e33108a1f842 +a928901c-fc34-11ea-a22a-dffbb8f1da94 +a928afca-fc34-11ea-a88c-f73aa45383e5 +a928d982-fc34-11ea-86c7-3bffa63ae861 +a928fb56-fc34-11ea-819b-df6d43701b2e +a9291c26-fc34-11ea-bbaa-c790aa350448 +a92940b6-fc34-11ea-acb2-9f65880d2e63 +a9296366-fc34-11ea-9b38-774a66ab22c3 +a9298292-fc34-11ea-b815-7b54a1890389 +a929a128-fc34-11ea-beac-67dad2aafed4 +a929bece-fc34-11ea-8670-5329df8b84d7 +a929dd28-fc34-11ea-8797-0b210a0f4b9b +a929f9de-fc34-11ea-9239-bfec162d8c38 +a92a172a-fc34-11ea-821b-736a3e0ddff9 +a92a35fc-fc34-11ea-b16a-6bbe23c08fda +a92a5384-fc34-11ea-9b09-4b8cab9b17f2 +a92a6f86-fc34-11ea-8b5e-4fa552a65619 +a92a8c46-fc34-11ea-babc-632b8eeade37 +a92aa960-fc34-11ea-8385-c36a9130e19c +a92ac558-fc34-11ea-a1f5-db6851dc122f +a92ae2b8-fc34-11ea-ac92-6f1c793822d1 +a92b0590-fc34-11ea-8a84-fbca6cff5158 +a92b2692-fc34-11ea-a886-b7a048a88bd1 +a92b45e6-fc34-11ea-881f-7785d55d806d +a92b656c-fc34-11ea-a4bc-1f301bd0eccd +a92b8a2e-fc34-11ea-a583-e32936caf36b +a92baba8-fc34-11ea-8291-db1843117763 +a92bc9f8-fc34-11ea-8681-1b2cf619321b +a92be6cc-fc34-11ea-91de-6f9acde96665 +a92c04f4-fc34-11ea-8225-17080af37b3e +a92c216e-fc34-11ea-92e0-4bb96a5b78cd +a92c3ed8-fc34-11ea-ad7e-87aeaa4e6b41 +a92c5c1a-fc34-11ea-9225-b73c9600cfb4 +a92c78a8-fc34-11ea-8bb7-3fe340fd9676 +a92c9716-fc34-11ea-8cbd-6f21b1c07fac +a92cb3e0-fc34-11ea-b3ad-5fe335a98b18 +a92cd0e6-fc34-11ea-b109-17b9313f29c2 +a92ceed2-fc34-11ea-84ca-f7f57695f914 +a92d0da4-fc34-11ea-ab55-67de0723d772 +a92d2bc2-fc34-11ea-b624-6fbf8233cfb8 +a92d4922-fc34-11ea-a010-4bbbab11500d +a92d6754-fc34-11ea-a000-b3e94438d2a0 +a92d8518-fc34-11ea-8e7e-f3cb64531090 +a92da6b0-fc34-11ea-adc1-2305e5ad0b93 +a92dc62c-fc34-11ea-acb1-4f1faf458549 +a92de5ee-fc34-11ea-a148-c78b3b5ca908 +a92e065a-fc34-11ea-a57a-f79386154a24 +a92e2496-fc34-11ea-8bab-7f77b5c748e4 +a92e444e-fc34-11ea-8435-1b26245713ef +a92e6424-fc34-11ea-bc80-cbfeee63ed94 +a92e809e-fc34-11ea-9a3e-db290eb483f6 +a92e9e6c-fc34-11ea-a940-2fb693564d66 +a92ebc08-fc34-11ea-b6a5-b3d3f98afefd +a92edbde-fc34-11ea-9fa8-a317127c453b +a92ef8d0-fc34-11ea-88dd-632fb480406e +a92f16da-fc34-11ea-8b2e-27b3c6fb0352 +a92f3570-fc34-11ea-9da5-5ba5229d3031 +a92f550a-fc34-11ea-a32a-6f3dc5734f06 +a92f7404-fc34-11ea-a5a7-0f78884649ea +a92f9240-fc34-11ea-b600-e307b5606723 +a92fb36a-fc34-11ea-9aa4-5f6b4f0b2ccb +a92fd21e-fc34-11ea-8151-f762a21dfe71 +a92fef10-fc34-11ea-9822-47778ede22a3 +a9300ad6-fc34-11ea-b339-6f0f7cb92694 +a9302dc2-fc34-11ea-9ca3-ab4b8a539fed +a9304d84-fc34-11ea-9d57-1f494a36baf9 +a9306cd8-fc34-11ea-81fb-33f8f9bbe0ed +a9308b96-fc34-11ea-869c-6727c2d97398 +a930a9a0-fc34-11ea-b291-6b9646b5e5b6 +a930c7b4-fc34-11ea-b244-a77bb67c7914 +a930e564-fc34-11ea-b60a-4bc97ecfd33f +a93103c8-fc34-11ea-b2c6-3fa51a0ffcc3 +a9312042-fc34-11ea-b7ed-b3dbfb9a6604 +a9313eba-fc34-11ea-855f-0796477bdb3f +a9315d50-fc34-11ea-bd54-4b26ea6fc75d +a9317984-fc34-11ea-8f66-8fff6617e4bb +a93197ca-fc34-11ea-85a1-37fc670eb24a +a931b732-fc34-11ea-95e4-2b35825516bb +a931d4d8-fc34-11ea-8332-3b919b7cdc87 +a931f4ae-fc34-11ea-99b3-232ab15bb03f +a9321240-fc34-11ea-81c7-0f125a6e66d8 +a932357c-fc34-11ea-ac47-67dd1bbe3e4a +a93254da-fc34-11ea-8dfe-6fe8730cd2c6 +a9327104-fc34-11ea-8003-17fb00e20c3a +a9328fb8-fc34-11ea-a12a-2f152ffe72d2 +a932af16-fc34-11ea-8c96-8b35fbb5bb29 +a932cde8-fc34-11ea-ad15-07d975e8b2f3 +a932ec60-fc34-11ea-a21b-b79313d54ed9 +a9330ede-fc34-11ea-9438-f7f6da846ae0 +a9333396-fc34-11ea-945f-cfeb38641d2c +a9335402-fc34-11ea-b38d-b37147052df7 +a9337554-fc34-11ea-a568-8f5aaa7d667f +a9339368-fc34-11ea-8d18-0ff56f00eb22 +a933af92-fc34-11ea-9b15-eb38b9b34105 +a933cd4c-fc34-11ea-86b3-3b62b236441f +a933eb9c-fc34-11ea-9e45-4f2df32dfc06 +a9340924-fc34-11ea-9a52-4fffbf0482c0 +a934268e-fc34-11ea-b81f-43bef42a15b5 +a934445c-fc34-11ea-8e95-b7120a2822e4 +a9346356-fc34-11ea-8f8f-4fe800fadfe2 +a93480e8-fc34-11ea-94f8-43335a3a50bd +a9349e2a-fc34-11ea-9c6e-abed9bd2da08 +a934bbee-fc34-11ea-86c1-dfbb1e4e80cc +a934db60-fc34-11ea-bcf7-6bd9b143dae6 +a934fbfe-fc34-11ea-8933-4b19f11616a0 +a93518f0-fc34-11ea-bd5a-3f32f7ab38b9 +a9353592-fc34-11ea-a7bc-af522f1721d0 +a93556d0-fc34-11ea-adf0-d3b370ed78fc +a93579a8-fc34-11ea-8e80-bb8fc926c8dc +a9359992-fc34-11ea-b8d7-8766d070ca3d +a935bf12-fc34-11ea-8076-5ba1feb70d7f +a935e802-fc34-11ea-aa40-576b1e62a6c5 +a9360ec2-fc34-11ea-b8b1-73dc077485e7 +a9363640-fc34-11ea-abd5-cb7ae321a033 +a936571a-fc34-11ea-9bdb-bf9ceca2a353 +a9367b82-fc34-11ea-a9e4-7f51db61dd52 +a936a1ac-fc34-11ea-bd98-3b1536b03c1d +a936c3c6-fc34-11ea-b769-e382a75ed8d0 +a936e252-fc34-11ea-9094-b32fc62849d9 +a9370ab6-fc34-11ea-84dd-433c349a9be0 +a9373086-fc34-11ea-8750-6339146b9e7e +a9375098-fc34-11ea-8dc9-6bb90fa01db8 +a937721c-fc34-11ea-a065-13e904a2de4e +a93790bc-fc34-11ea-9941-bbd41551aee1 +a937ae1c-fc34-11ea-a111-53d41ee116aa +a937e936-fc34-11ea-8833-1b6692a0e641 +a9381172-fc34-11ea-b031-13ff30894104 +a9383904-fc34-11ea-8dff-c3ea8f40bbee +a9385c40-fc34-11ea-a149-63bb2fc89199 +a938821a-fc34-11ea-9531-8fc05220ff04 +a938abc8-fc34-11ea-8e7f-6374cf8cbbb9 +a938cf72-fc34-11ea-858a-6beddc19a74e +a938f45c-fc34-11ea-92de-373358c78c75 +a93917de-fc34-11ea-b675-436cb0f4d200 +a9393fc0-fc34-11ea-b3c5-4b605f4ac3a6 +a939604a-fc34-11ea-8d86-7fd0c3c9fed3 +a9398124-fc34-11ea-88e6-3fb09cf368a8 +a939a258-fc34-11ea-a765-7333f9cd9b7b +a939c116-fc34-11ea-98ca-2770acb48937 +a939dfe8-fc34-11ea-a6d8-4fed9af3b39b +a939fe74-fc34-11ea-a594-4769e717e686 +a93a1a94-fc34-11ea-b85c-833b1c6d5f15 +a93a377c-fc34-11ea-8e86-f337a95a9d8e +a93a5518-fc34-11ea-813f-4b8109a1a288 +a93a728c-fc34-11ea-b7ce-5f31ded41050 +a93a9258-fc34-11ea-a97f-cb19b5560b80 +a93ab0d0-fc34-11ea-ac74-5f4af29f5408 +a93ad506-fc34-11ea-b621-6740268a13e0 +a93af464-fc34-11ea-babf-3b7d77dd993e +a93b119c-fc34-11ea-8406-cf7b358fb7a1 +a93b2f38-fc34-11ea-ae38-7f3c99b0678e +a93b4c48-fc34-11ea-b5d4-8bad8a4b5a41 +a93b69f8-fc34-11ea-891d-bf2bee9a8b73 +a93b897e-fc34-11ea-8e16-93e030b2a94a +a93ba6f2-fc34-11ea-bf81-333cf7ed09fa +a93bc6e6-fc34-11ea-a3fb-df0f7f598699 +a93bebb2-fc34-11ea-89f1-53b6ffbb2238 +a93c0bf6-fc34-11ea-9db1-a37b215470d5 +a93c2f32-fc34-11ea-b05f-07493ff8b8d4 +a93c4efe-fc34-11ea-9349-bffeb5d8547e +a93c6f06-fc34-11ea-8437-d781d9a8f20d +a93c91c0-fc34-11ea-8e7d-9f6d5e222115 +a93cb95c-fc34-11ea-a4b4-8fb496086384 +a93cf6f6-fc34-11ea-87a5-ab2b5deb7dea +a93d3490-fc34-11ea-909b-fb044aafc8f1 +a93d6ab4-fc34-11ea-b3e6-6fa5ca6e0957 +a93d8dc8-fc34-11ea-8030-2b17ab6c541c +a93dad58-fc34-11ea-a051-43bc532061e4 +a93dd1c0-fc34-11ea-87f6-6ff5e5757fdd +a93df11e-fc34-11ea-a2f3-4fa7ee7ec01f +a93e0e92-fc34-11ea-9cbc-a313bd002e6d +a93e2cce-fc34-11ea-bfc2-bb37481fc7d2 +a93e4a38-fc34-11ea-9a3b-77b15dedd406 +a93e672a-fc34-11ea-900a-7bf052570f80 +a93e8282-fc34-11ea-aa4c-236c7fc202f4 +a93ea1c2-fc34-11ea-83e4-e754cf426c9f +a93ebee6-fc34-11ea-b665-93b43e82002c +a93edcb4-fc34-11ea-aa97-af2bc08393d7 +a93efb54-fc34-11ea-afa4-57aa48e06966 +a93f1b02-fc34-11ea-abde-7f7d3c2074a9 +a93f37b8-fc34-11ea-9871-973534a3d817 +a93f56c6-fc34-11ea-9a8f-8f5190320177 +a93f7746-fc34-11ea-9ec0-079ec8fe7a38 +a93f9686-fc34-11ea-8bc2-1304088ed674 +a93fb60c-fc34-11ea-83d7-2707d16d0cf3 +a93fda24-fc34-11ea-b08a-87caf1cc1259 +a93ffce8-fc34-11ea-9511-47f22251be2c +a9401d0e-fc34-11ea-a47c-ff4b9a973e8b +a9403b2c-fc34-11ea-b506-636025911ca9 +a940574c-fc34-11ea-8b7a-cbfdb165f2be +a94077b8-fc34-11ea-8e0a-63064e9e0759 +a940969e-fc34-11ea-b1af-ef249da73540 +a940b3a4-fc34-11ea-877b-1fb65e985825 +a940d28a-fc34-11ea-88bf-77afabbab811 +a940f3c8-fc34-11ea-8d2b-375e0423a9e8 +a9411196-fc34-11ea-a742-8b277033f114 +a9412e7e-fc34-11ea-9204-7b49613ac90d +a9414ca6-fc34-11ea-b5b9-b3b560596335 +a9416858-fc34-11ea-a5d3-fbb56f8190c1 +a9418450-fc34-11ea-bf0a-c778edcda5b9 +a941a264-fc34-11ea-926b-4735522bab2f +a941be98-fc34-11ea-ab2b-5f7e62b97cc2 +a941ddd8-fc34-11ea-80f4-a744fcfdb54f +a941fcdc-fc34-11ea-a880-f392bec7e777 +a9421b0e-fc34-11ea-a56c-cf1cbe69bab6 +a9423a1c-fc34-11ea-a523-676e4d2e0d7b +a9425e52-fc34-11ea-9601-6b45b4763a6f +a942808a-fc34-11ea-8240-c7202e7578fc +a942a11e-fc34-11ea-b6b1-bf64ca06c321 +a942c072-fc34-11ea-bbc0-afb723ec53c7 +a942dfda-fc34-11ea-a6c2-a71c800ff161 +a942fdbc-fc34-11ea-ab67-bfaffeda419d +a9431950-fc34-11ea-aa1d-f7b86e4fd0d1 +a94338fe-fc34-11ea-9d3c-0394abe4a50c +a9435758-fc34-11ea-919b-7ff3dbe13a40 +a9437486-fc34-11ea-a1ab-073118ae2d35 +a9438fc0-fc34-11ea-b074-a7a3c130cd65 +a943ad16-fc34-11ea-b23d-735b12462f2b +a943cab2-fc34-11ea-b422-3f22ced27018 +a943e916-fc34-11ea-9b8a-c3173d2580e6 +a94407a2-fc34-11ea-a613-57cc6ec16ba4 +a94424ee-fc34-11ea-b75a-734482496712 +a94441fe-fc34-11ea-89a6-1b90ae4458fe +a9445e50-fc34-11ea-9135-a7158de0fe4a +a9447d7c-fc34-11ea-a3b2-678e6bea0772 +a9449c80-fc34-11ea-a744-f7ea7ba16936 +a944c03e-fc34-11ea-a828-bb196a793849 +a944e082-fc34-11ea-be63-dbcc5ce0acfc +a94500a8-fc34-11ea-a2c5-b77ee4eac220 +a945254c-fc34-11ea-992c-cfd8e7244199 +a9454734-fc34-11ea-8ee4-db1f54cc0412 +a9456ac0-fc34-11ea-abc7-a37cd38c9009 +a9458abe-fc34-11ea-a2e3-7bf4776f4889 +a945a698-fc34-11ea-ac57-6ff96b8f92d0 +a945c506-fc34-11ea-a57c-8f67f3d85580 +a945e338-fc34-11ea-b742-4f8145562885 +a9460750-fc34-11ea-aa9c-7371dd4b9c31 +a9462686-fc34-11ea-975a-172d0cca6d89 +a9464544-fc34-11ea-9535-af934c6d7f7a +a946638a-fc34-11ea-a66e-6b5ece00be14 +a94680cc-fc34-11ea-96cd-d3f41bca855a +a9469e9a-fc34-11ea-970d-d3644458a0f2 +a946bb3c-fc34-11ea-9ce4-ff768c5ba25a +a946d9b4-fc34-11ea-941b-dfca20e4016b +a946f8ae-fc34-11ea-895e-4f3963fcb9e5 +a947173a-fc34-11ea-be43-8773577d560b +a947354e-fc34-11ea-834b-ab6260372d97 +a94758d0-fc34-11ea-ab20-77385732ee6d +a9477b8a-fc34-11ea-9710-97bfb254f476 +a9479a3e-fc34-11ea-b99e-6fe69dac9b33 +a947b906-fc34-11ea-82e4-bbfb15cc25d2 +a947d79c-fc34-11ea-9834-c71b6c2f94c2 +a947f650-fc34-11ea-a26b-e333e27661e1 +a9481536-fc34-11ea-a47c-a3a68a2c7233 +a948343a-fc34-11ea-99fc-7764579c9468 +a9485190-fc34-11ea-983c-477f760b6423 +a9486e1e-fc34-11ea-bb1f-43d724cfe14b +a9488e26-fc34-11ea-af10-a322c45129f9 +a948abd6-fc34-11ea-a7b6-a766592925bf +a948c8aa-fc34-11ea-85ec-e7195b94914f +a948e592-fc34-11ea-9f59-e3ed20e7c63b +a9490310-fc34-11ea-9f80-cbda697d20ca +a94922aa-fc34-11ea-b40c-4b24a0805a61 +a9494046-fc34-11ea-b7fc-bf462bc473b2 +a9495c20-fc34-11ea-a9c5-1bcf323c9199 +a9497a2a-fc34-11ea-9a5c-dbba86865f79 +a9499668-fc34-11ea-875a-4bc72049e297 +a949ba4e-fc34-11ea-89c2-9bb6583d6a26 +a949dbdc-fc34-11ea-970c-7f27aa41342c +a949fbb2-fc34-11ea-8e11-8b97f801e613 +a94a1ce6-fc34-11ea-8043-039054d0fe90 +a94a4130-fc34-11ea-ba98-539e588828ab +a94a62fa-fc34-11ea-abf5-07c99f54a902 +a94a81d6-fc34-11ea-b26e-6f75349bbee7 +a94a9fc2-fc34-11ea-b5e1-dbd945aa3eaa +a94abfc0-fc34-11ea-ad87-cfa7c5404c4e +a94adf6e-fc34-11ea-948f-33d0d30b88bd +a94afd50-fc34-11ea-8f90-9370cee2fe89 +a94b18ee-fc34-11ea-bf73-0fd9fc47fca7 +a94b377a-fc34-11ea-a76a-b704e0cd3960 +a94b5840-fc34-11ea-9f88-eb56cee31089 +a94b77a8-fc34-11ea-80d9-c71d8322dc66 +a94b9724-fc34-11ea-a20e-a72bd048ca5d +a94bb42a-fc34-11ea-b12b-0bf24287e2da +a94bd20c-fc34-11ea-b476-97ee7ed1c9fd +a94bf016-fc34-11ea-9119-e7ce8f0fb4da +a94c0ef2-fc34-11ea-b2a9-5397c4430203 +a94c2d2e-fc34-11ea-af46-53f95d0baf41 +a94c4b24-fc34-11ea-a4ec-831e91542d81 +a94c6eba-fc34-11ea-adce-035c70a757bd +a94c90b6-fc34-11ea-a76f-3377854b44a8 +a94cb5d2-fc34-11ea-a519-ef0c761b1cb3 +a94cd616-fc34-11ea-bd0d-0ffb2c829b93 +a94cf466-fc34-11ea-90c6-2f7fa7d47585 +a94d148c-fc34-11ea-b514-a75ea4cec6b7 +a94d35fc-fc34-11ea-8961-fbd2d640a735 +a94d54e2-fc34-11ea-b41e-ebb8c875363b +a94d72b0-fc34-11ea-90e0-2f8e8157ca9a +a94d90d8-fc34-11ea-9bad-b34a1f1a9da7 +a94db0a4-fc34-11ea-8060-83cc5042f1fd +a94dce4a-fc34-11ea-8f13-83d1ed8e7743 +a94dea38-fc34-11ea-95e4-83b964853405 +a94e0b4e-fc34-11ea-bad7-a727da88f4bd +a94e2a52-fc34-11ea-84c6-8b42511be182 +a94e4726-fc34-11ea-a7b4-47de4807a227 +a94e6bfc-fc34-11ea-9041-9f491be79bdc +a94e8a10-fc34-11ea-8198-d3491ee38908 +a94ead6a-fc34-11ea-b91b-5fb64ae87ce0 +a94ecd04-fc34-11ea-82d5-97485be33bad +a94eecbc-fc34-11ea-9395-9bde8670b047 +a94f0fe4-fc34-11ea-a719-3b0fdaadf817 +a94f312c-fc34-11ea-824f-1723b3382c20 +a94f535a-fc34-11ea-af34-b77a026ce4fe +a94f7286-fc34-11ea-b77b-cb39a623ab15 +a94f90c2-fc34-11ea-8181-1fe5b714c986 +a94fad3c-fc34-11ea-826e-0fefa98a7e99 +a94fcb14-fc34-11ea-8c8d-c302cfa1e4ac +a94fe978-fc34-11ea-8ae8-bf83147f36bd +a950069c-fc34-11ea-aaf1-e75ed04a52a3 +a95023c0-fc34-11ea-a1c7-bfb2bd85ac47 +a9504224-fc34-11ea-b534-c37296cca7ce +a9505e12-fc34-11ea-b6d0-d7fd50233518 +a9507cda-fc34-11ea-926e-43b5f0fa0e87 +a95098c8-fc34-11ea-b825-731dae57af8e +a950b448-fc34-11ea-b5ba-d3b729a203fb +a950d1da-fc34-11ea-8819-dfda2e1ed08e +a950f282-fc34-11ea-b67d-0f98a7cd93ad +a9510efc-fc34-11ea-a44a-979868d12eb0 +a9512c5c-fc34-11ea-be76-27595217da2d +a9514cdc-fc34-11ea-8b9d-a768fa014527 +a9516c6c-fc34-11ea-8309-7b8d24416855 +a9518fd0-fc34-11ea-bbec-4be6fe2246e7 +a951b0e6-fc34-11ea-a17c-3b284f7c74fe +a951d06c-fc34-11ea-9d3a-6fa90f416c76 +a951ee6c-fc34-11ea-b03f-8f9f5f95c5dd +a9520dfc-fc34-11ea-9c39-83cc4b2f3efd +a9522d32-fc34-11ea-8545-87e7b693c74c +a9524d26-fc34-11ea-a4ec-b7ccc09873d8 +a9526af4-fc34-11ea-8983-2b031d9e8de8 +a9528ad4-fc34-11ea-b3ae-5bf186aed9c5 +a952a7c6-fc34-11ea-9464-abc0cbf030fd +a952c648-fc34-11ea-8d83-87c38b1498ca +a952e42a-fc34-11ea-ae73-2f4857d6f7f6 +a953031a-fc34-11ea-8d62-cfc7b7ec52ed +a9532250-fc34-11ea-977d-eb8cda9aca08 +a9533e20-fc34-11ea-a195-73420eb57704 +a9535c5c-fc34-11ea-9194-67276fc9d9c2 +a9537c5a-fc34-11ea-a955-5f2757070df4 +a9539960-fc34-11ea-8656-27450c0ba989 +a953b986-fc34-11ea-a318-b73b39606367 +a953da4c-fc34-11ea-93eb-7bf939408cc4 +a953fa2c-fc34-11ea-b661-ebf3068cfa27 +a9541890-fc34-11ea-9c2b-736783193bac +a9543762-fc34-11ea-a402-6757db3136e3 +a954565c-fc34-11ea-846a-5f6353f3d8e1 +a95476e6-fc34-11ea-bce4-83f8cf06850d +a9549b8a-fc34-11ea-a518-47de1b6d9a0b +a954bb60-fc34-11ea-91be-f7b2119e4a9d +a954d9a6-fc34-11ea-bce1-efae9c3147e5 +a954f814-fc34-11ea-b95e-a3732c3c4a38 +a955154c-fc34-11ea-b676-db654300f0a9 +a95531d0-fc34-11ea-8cbb-13f143118f45 +a9554f6c-fc34-11ea-a59e-b7988594ee2e +a9556bf0-fc34-11ea-8253-f303583bc5fb +a9558900-fc34-11ea-b884-3fc149ff8c09 +a955a91c-fc34-11ea-a6c5-cba1b8741ea8 +a955c6cc-fc34-11ea-b31b-5781b857bd8d +a955e40e-fc34-11ea-a813-a3217aeb8f29 +a95600e2-fc34-11ea-9dab-dbec2fab9ac6 +a9561eec-fc34-11ea-8fd6-af9715f0521c +a9563d0a-fc34-11ea-a012-437d407cdfd9 +a95659e8-fc34-11ea-a3a3-371209074588 +a956766c-fc34-11ea-8988-4b560d9f1026 +a95694da-fc34-11ea-8866-67b760a0f2b0 +a956b46a-fc34-11ea-b42c-1365a2f29a52 +a956d8fa-fc34-11ea-94e0-b38122e9319e +a956f894-fc34-11ea-95d2-5fd835247ec6 +a95716e4-fc34-11ea-906f-a7d5d29f7114 +a95735ca-fc34-11ea-afbb-5f00343ef365 +a95754ce-fc34-11ea-80d1-e354fc522eb8 +a95773d2-fc34-11ea-bbdb-df57ca86c417 +a9579358-fc34-11ea-baad-f7b583f15281 +a957b09a-fc34-11ea-91b3-4b03789dcbf8 +a957cf12-fc34-11ea-9f00-7f8523c01f76 +a957ec0e-fc34-11ea-81b8-5b1d326754c3 +a958095a-fc34-11ea-a3d5-235aa86e090f +a9582610-fc34-11ea-849f-efd179009420 +a95842ee-fc34-11ea-a84b-d358e4984b33 +a95863d2-fc34-11ea-b580-1b80fb5a6566 +a958818c-fc34-11ea-be8f-27e082c36b8e +a958a13a-fc34-11ea-8924-ffe0703c3cac +a958bf6c-fc34-11ea-8ea9-73f520b7bd8e +a958de16-fc34-11ea-8e61-271ca304d21c +a958fc70-fc34-11ea-9bc9-a3a10cb667e9 +a9591ab6-fc34-11ea-9d85-eb8823472398 +a9593ed8-fc34-11ea-a9dc-ab6b7024fe65 +a95963f4-fc34-11ea-91fb-4b3d52393021 +a95984ba-fc34-11ea-82a4-ef52567604b7 +a959a4ae-fc34-11ea-9828-f7d19e667106 +a959c178-fc34-11ea-b374-f796e62512b8 +a959dcda-fc34-11ea-87ec-4f2d21335163 +a959faee-fc34-11ea-be85-bb2a68c9f109 +a95a1aba-fc34-11ea-adb2-136579d0f3c5 +a95a3a22-fc34-11ea-90f3-1b5b0183c80a +a95a5750-fc34-11ea-bb1a-1b3b8f6d4c22 +a95a750a-fc34-11ea-80a6-ebda2ad68a4c +a95a921a-fc34-11ea-920d-2f74597ab1c9 +a95aaf98-fc34-11ea-ac8e-17dd280728d7 +a95accc6-fc34-11ea-84b8-d34ff61191f1 +a95aebac-fc34-11ea-988a-875e76d72da1 +a95b0858-fc34-11ea-9300-8f26d9a15ee3 +a95b22b6-fc34-11ea-9237-43971fc0aa3a +a95b4228-fc34-11ea-bff8-b37e1b55cc10 +a95b617c-fc34-11ea-aa31-03d88a190146 +a95b81e8-fc34-11ea-9ba2-1f6d96ecd7a0 +a95ba11e-fc34-11ea-bd1a-37535cb0ade4 +a95bc072-fc34-11ea-b77b-b30e02330715 +a95be49e-fc34-11ea-bd27-fb9afa6dadfd +a95c0456-fc34-11ea-9c15-871c09583a36 +a95c230a-fc34-11ea-a037-07a10217bfc3 +a95c4240-fc34-11ea-8246-234162313479 +a95c60a4-fc34-11ea-a69b-1fcb17605398 +a95c8264-fc34-11ea-ac44-8beb4630fec4 +a95ca064-fc34-11ea-acbe-eb33ad919ef6 +a95cbcde-fc34-11ea-be52-371cbf4e5c56 +a95cdb9c-fc34-11ea-ba7c-2fb5e103359b +a95cf8e8-fc34-11ea-a1a5-a7bbddf1ccae +a95d1652-fc34-11ea-accf-476c79a3f616 +a95d35d8-fc34-11ea-ad72-2f0f622a4129 +a95d557c-fc34-11ea-a094-0fe7db806cc6 +a95d7246-fc34-11ea-98e4-e74d40dc1c67 +a95d90a0-fc34-11ea-bbd0-43869a1920e8 +a95dafa4-fc34-11ea-9e98-a744c92667a4 +a95dcf8e-fc34-11ea-af08-affb23440399 +a95deb68-fc34-11ea-9ba3-6bffc4f8b55d +a95e0850-fc34-11ea-aa4f-3f253e5f774c +a95e2786-fc34-11ea-b66f-fb4565d75626 +a95e51b6-fc34-11ea-9b40-ab2019a7b123 +a95e727c-fc34-11ea-8714-8fb8235eebcf +a95e91a8-fc34-11ea-abff-a7394e8b3d99 +a95eb2e6-fc34-11ea-a6ae-63ec3829ee30 +a95ed104-fc34-11ea-bf67-6fc8d1c6f71f +a95eef18-fc34-11ea-b463-e33edd7a6ddc +a95f0be2-fc34-11ea-b5e1-97f859c3f988 +a95f28ca-fc34-11ea-b0a4-9b2d8ef1418a +a95f45a8-fc34-11ea-b78b-1b630826aa7c +a95f63e4-fc34-11ea-b655-c3eaf331e116 +a95f8252-fc34-11ea-bdfd-3fa7cc48d2d7 +a95f9f8a-fc34-11ea-b556-9f1753add8a1 +a95fbe7a-fc34-11ea-bfcb-5b489d3f80d7 +a95fdea0-fc34-11ea-b8bf-7b3449b74037 +a95ffe58-fc34-11ea-b5ad-bfcc9932e61d +a9601d0c-fc34-11ea-9097-ef90bbd527d1 +a9603c38-fc34-11ea-84ff-53aeea1a6b21 +a96059d4-fc34-11ea-b6cf-ebbb58357e97 +a9607630-fc34-11ea-8c2b-a7f990972552 +a96092be-fc34-11ea-9369-07eb8c46c8dc +a960b5b4-fc34-11ea-97fa-fb99e0fa7d16 +a9617396-fc34-11ea-bc06-538220921ec5 +a961936c-fc34-11ea-904d-7bed7b7f7448 +a961afdc-fc34-11ea-9ecc-df3bc94c0173 +a961cfda-fc34-11ea-af32-c7e5a3d43100 +a961ec2c-fc34-11ea-8e0e-af4f63a97ed6 +a96208c4-fc34-11ea-813f-03f193379a20 +a96228ea-fc34-11ea-8486-8743d1e67db3 +a96245fa-fc34-11ea-821f-bb65e2272ad9 +a96261ac-fc34-11ea-9a12-6758a26e489a +a9627f02-fc34-11ea-88be-bf0dfb949479 +a9629ee2-fc34-11ea-a17d-e78d01bfbf61 +a962be72-fc34-11ea-8823-63e10bd7c858 +a962db28-fc34-11ea-aaf7-4368b0155e7c +a962f9d2-fc34-11ea-b1a7-c302a326425c +a96317c8-fc34-11ea-9ab7-af7a5b70ee6c +a9633b90-fc34-11ea-bfb5-d774222823c0 +a9635ba2-fc34-11ea-855d-df4b9a110cae +a9637dd0-fc34-11ea-9e09-73b0e88031ff +a9639a90-fc34-11ea-9cf4-4b9d685f4683 +a963bc0a-fc34-11ea-807d-936932fa263c +a963dca8-fc34-11ea-9bc7-eb872b1f6cc2 +a963fada-fc34-11ea-8559-cf983cfb2203 +a9641880-fc34-11ea-8c18-636ca846a4a8 +a96436da-fc34-11ea-aa7e-07c6bf739029 +a96453fe-fc34-11ea-b206-0b8337339b20 +a96471fe-fc34-11ea-8299-53ad9378dede +a9649076-fc34-11ea-a0a0-6bfaa19afbbf +a964ad22-fc34-11ea-b1ea-af29eb177990 +a964ca14-fc34-11ea-b64f-6326f3fb3ea1 +a964e81e-fc34-11ea-9518-7f09cf820c88 +a96504fc-fc34-11ea-b8ee-23ff489351e5 +a965227a-fc34-11ea-939e-0f670cd52f6f +a96541d8-fc34-11ea-8a67-3bed547aa4fc +a9655f4c-fc34-11ea-922e-c73809dfb337 +a9657c02-fc34-11ea-b839-6f12a72d8d9c +a9659994-fc34-11ea-a4d1-3bdd1526caab +a965bc1c-fc34-11ea-8079-938a61e9fd72 +a965dd8c-fc34-11ea-9f16-cfb2f2c07544 +a965fdf8-fc34-11ea-a2ac-d36165eef523 +a96622d8-fc34-11ea-9565-a33e77c56f83 +a96642ae-fc34-11ea-ac27-ab31739e04d7 +a96660fe-fc34-11ea-837e-4fd8d9583abb +a96681ec-fc34-11ea-87bc-0bbbf8f8399c +a966a0be-fc34-11ea-af62-a3d2b61e1689 +a966be14-fc34-11ea-8aea-9386e0f83af4 +a966da48-fc34-11ea-bb07-bfd686f043aa +a966f9f6-fc34-11ea-8a52-c3d38c6da059 +a9671af8-fc34-11ea-b2dd-67a820145a80 +a96737cc-fc34-11ea-a0c6-07a06b1d05b0 +a9675568-fc34-11ea-8376-73e809d300e9 +a967732c-fc34-11ea-86e2-232484f03722 +a9679014-fc34-11ea-8b06-2ba7a18aedc0 +a967acde-fc34-11ea-ad50-531cfb6e0586 +a967cae8-fc34-11ea-be5c-7b8148530bee +a967e744-fc34-11ea-a684-cf3eac03643f +a968092c-fc34-11ea-aa0e-4fd105bb6255 +a9682790-fc34-11ea-b272-f763f4dad936 +a9684518-fc34-11ea-9c16-27003a6c4792 +a96864bc-fc34-11ea-a939-b739405c5f3e +a96882e4-fc34-11ea-8f1b-ff76c5abff35 +a968a242-fc34-11ea-aadb-1b5c06d4c426 +a968c664-fc34-11ea-b579-832a8faff842 +a968eb08-fc34-11ea-984e-5f8ed8d3c250 +a96909c6-fc34-11ea-994d-ef845c4efa48 +a969299c-fc34-11ea-8abb-0302db644d37 +a969486e-fc34-11ea-9815-d3fa5fee230a +a96967ae-fc34-11ea-a3bb-fb4ddc1da13c +a969864e-fc34-11ea-8427-47505ad4c2f1 +a969a390-fc34-11ea-b646-cbe964ded34b +a969c24e-fc34-11ea-889c-b369babe45a5 +a969dea0-fc34-11ea-b606-d3674b5867d7 +a969fb38-fc34-11ea-991a-0b9947cafd48 +a96a1a6e-fc34-11ea-8e61-ff526850e3e7 +a96a37ba-fc34-11ea-af12-076fa0fd9a9b +a96a55ce-fc34-11ea-a115-bbc39d183623 +a96a734c-fc34-11ea-962f-bf91bb5390f0 +a96a90e8-fc34-11ea-bdb3-671b5a2d6ec7 +a96ab2da-fc34-11ea-adec-cf0cef060f66 +a96ad238-fc34-11ea-991c-f385e7feedf6 +a96af3d0-fc34-11ea-ac9f-67d2ae249030 +a96b11a8-fc34-11ea-a710-a32c06edaa1b +a96b3570-fc34-11ea-80e9-afe0f767f6a1 +a96b5690-fc34-11ea-9ec5-e32cd8d95689 +a96b75c6-fc34-11ea-98bb-f77714f96752 +a96b93c6-fc34-11ea-a84c-3787b5c11e25 +a96bb040-fc34-11ea-bcbb-57378bfa8783 +a96bce90-fc34-11ea-a19a-cb866a75003f +a96bec5e-fc34-11ea-a486-4303ef387922 +a96c0ab8-fc34-11ea-b1d2-ebfaef83997f +a96c27be-fc34-11ea-9b2c-a38b9f452547 +a96c4424-fc34-11ea-ad3b-8f0c7ffb236a +a96c610c-fc34-11ea-bd42-ef40d9b11b06 +a96c7e4e-fc34-11ea-80c9-af0ff6f72f47 +a96c9b86-fc34-11ea-8649-674478838a9c +a96cba80-fc34-11ea-b8ea-ebc868e59bd5 +a96cda56-fc34-11ea-bca4-4f0451db38cb +a96cf72a-fc34-11ea-9d9c-17c3dc969b48 +a96d15d4-fc34-11ea-ac21-8727217d946c +a96d388e-fc34-11ea-8a60-471de4f91924 +a96d58aa-fc34-11ea-968a-fb643af1b282 +a96d788a-fc34-11ea-90b6-7fe7ee60c063 +a96d96ee-fc34-11ea-bf23-579b03518232 +a96db688-fc34-11ea-9a90-77d813bdea3b +a96dd762-fc34-11ea-9379-8f322766bd89 +a96df7b0-fc34-11ea-811e-33628901bfb8 +a96e1786-fc34-11ea-8d72-d3ae9cd6c288 +a96e3766-fc34-11ea-8851-2ff8a11412e7 +a96e57f0-fc34-11ea-bee6-ffa57f83c139 +a96e732a-fc34-11ea-9e9b-237c46f9688f +a96e9382-fc34-11ea-96c5-3b8332dce168 +a96eb2b8-fc34-11ea-9e48-df3878fe0fde +a96ed07c-fc34-11ea-98ff-bff73a0039a3 +a96eee68-fc34-11ea-90c7-afb5c5bbcc1c +a96f0ea2-fc34-11ea-ab44-03c5155ddd26 +a96f2d6a-fc34-11ea-bc90-537c2e265c1e +a96f4a8e-fc34-11ea-a029-0f39a503081a +a96f6654-fc34-11ea-8131-67e510381d4d +a96f8580-fc34-11ea-ba1a-7377323c7a71 +a96fa204-fc34-11ea-82fe-87785e14ed4b +a96fbfb4-fc34-11ea-b3c0-c327f4f57c15 +a96fddaa-fc34-11ea-90db-27f64e1437fd +a96fffe2-fc34-11ea-9380-1f85c152a075 +a97022ba-fc34-11ea-92a1-93cb79cd6961 +a97042f4-fc34-11ea-8652-6fe3f5107da9 +a9706298-fc34-11ea-b9b3-9fb4c8e37d06 +a9708124-fc34-11ea-bf1c-dbb52fd50df7 +a970a26c-fc34-11ea-9d4e-ef2dff6b1633 +a970c12a-fc34-11ea-8043-87bc474eaf08 +a970ddf4-fc34-11ea-b10d-5b16d6df85c2 +a970fadc-fc34-11ea-86bd-3f9908d05c20 +a971172e-fc34-11ea-9e6b-6f8b7357b9bc +a97134de-fc34-11ea-b22f-e70842cf6373 +a97151b2-fc34-11ea-89c0-c3cb2d459ef9 +a9716e86-fc34-11ea-8d33-97b477fc817e +a9718a92-fc34-11ea-8c1d-b3b3480c4c79 +a971a90a-fc34-11ea-a280-1bc9de0e15cf +a971c5de-fc34-11ea-952f-aff30f9bd9d5 +a971e2da-fc34-11ea-9e3b-d3dd4918288f +a9720238-fc34-11ea-a9f0-7feec3bc41a7 +a9721f16-fc34-11ea-9ecb-4f0b1f087d47 +a9723bcc-fc34-11ea-b35a-cf151131416e +a9725a4e-fc34-11ea-b5ff-dbec1fecd56b +a97278e4-fc34-11ea-ae2a-1b93c9fef36c +a9729c5c-fc34-11ea-9c08-f734936f944f +a972bbba-fc34-11ea-94f7-97fed22206ea +a972dcee-fc34-11ea-bf8d-f36b7cb3d3f7 +a972fcc4-fc34-11ea-8a8d-1724d38895e6 +a9731dd0-fc34-11ea-82df-47308de0904b +a9733dd8-fc34-11ea-8f48-33e7e8343889 +a9735a8e-fc34-11ea-881a-ef2f239f173c +a97379e2-fc34-11ea-aed4-87c7c29da930 +a973986e-fc34-11ea-8019-3f35abd622f2 +a973b7f4-fc34-11ea-ac3f-f7bb69d6ce80 +a973d4e6-fc34-11ea-b862-7b3fd61cf40f +a973f0b6-fc34-11ea-885c-0b5688641525 +a9740eca-fc34-11ea-b1ef-8b462324d4a4 +a9742d10-fc34-11ea-8b6f-c3e692b77ba8 +a9744c8c-fc34-11ea-a623-bf02b6136880 +a9746bc2-fc34-11ea-bf43-f3adbd9a7c5d +a9748a6c-fc34-11ea-9151-cfd51219041e +a974a880-fc34-11ea-9c0c-1f64a5d894a1 +a974c90a-fc34-11ea-895e-7b9f35da8c78 +a974e9f8-fc34-11ea-92d2-fff6ac1e1562 +a9750794-fc34-11ea-b9a9-6f050eeed55e +a9752972-fc34-11ea-b2b8-7f56931b0566 +a9754e48-fc34-11ea-a2be-b3a0965f0378 +a9756d88-fc34-11ea-a6da-5fe837b1c37f +a9758c5a-fc34-11ea-a871-fbe685ed3688 +a975ac26-fc34-11ea-95d5-73a1540194cc +a975c8b4-fc34-11ea-9071-4b7dc455a4ec +a975e6dc-fc34-11ea-8e06-8b496176c789 +a9760572-fc34-11ea-8989-57fdae61b7c7 +a97624c6-fc34-11ea-993c-17aa9791d0d8 +a976429e-fc34-11ea-ba77-4b43f9d141fa +a9765eb4-fc34-11ea-be0b-cfa4aa17d6f2 +a9767d90-fc34-11ea-b99e-4f75c6ba6d37 +a9769d02-fc34-11ea-a57f-9f31e6ec749e +a976bbe8-fc34-11ea-a3b3-df66791802af +a976daa6-fc34-11ea-9401-efd49e161d77 +a976faf4-fc34-11ea-8b41-1bec406c18ed +a97718d6-fc34-11ea-a8dc-d38e1c7c4b45 +a9773668-fc34-11ea-afd2-cf993618b5bb +a9775468-fc34-11ea-bac1-d3b20747420e +a977aee0-fc34-11ea-adcf-1b5375113675 +a977ced4-fc34-11ea-ace7-6f50f3706f54 +a977efa4-fc34-11ea-bb33-cb78abb1f571 +a9781308-fc34-11ea-8c67-137b41e39e75 +a978331a-fc34-11ea-b720-2b48261eba9f +a97851f6-fc34-11ea-a30c-6b7086d7dcfd +a9787172-fc34-11ea-ae68-a3a55d8754c3 +a97896f2-fc34-11ea-8a1b-67848cdc5e38 +a978b358-fc34-11ea-8b8b-17179c821a82 +a978d1b2-fc34-11ea-9d6e-df83fcd73d5b +a978f002-fc34-11ea-85d9-4f3c6f6ecd01 +a9790de4-fc34-11ea-9853-4bb5a2545eef +a9792b4e-fc34-11ea-8cca-e77b40914416 +a9794bf6-fc34-11ea-bd75-f32c2f4cac6a +a9796c62-fc34-11ea-bdaa-e7f14cb48b5c +a97989b8-fc34-11ea-86b5-df11665d99f6 +a979a894-fc34-11ea-a58e-abe206587131 +a979c7ca-fc34-11ea-85c5-a7be67517f11 +a979e43a-fc34-11ea-9a03-57b9879d1862 +a97a015e-fc34-11ea-b8eb-d34ace57596b +a97a1ed2-fc34-11ea-9afb-2f48734a2d7f +a97a422c-fc34-11ea-89bc-e322390e53d1 +a97a61c6-fc34-11ea-84f6-77af2ff6a041 +a97a869c-fc34-11ea-9930-cbee33ca9444 +a97aa6b8-fc34-11ea-865d-2fb5ac806628 +a97ac71a-fc34-11ea-80b0-8fb153f0250e +a97ae740-fc34-11ea-a6b0-ab36cb92eb60 +a97b0432-fc34-11ea-9622-c33740c25e2f +a97b2200-fc34-11ea-ac70-2f09c04af11a +a97b4168-fc34-11ea-a05f-f7d0b47c49ea +a97b6198-fc34-11ea-a95d-f30307e7795d +a97b8006-fc34-11ea-8015-db0142e6ea6f +a97b9df2-fc34-11ea-b997-97bfee73d107 +a97bbaa8-fc34-11ea-92b0-af403c6af7c2 +a97bd9ca-fc34-11ea-9751-8bfb5feb5a58 +a97bf996-fc34-11ea-9de3-47e1be667bdb +a97c193a-fc34-11ea-a7a4-2ff0fb728a5d +a97c36c2-fc34-11ea-8515-5b1dbd33217b +a97c53dc-fc34-11ea-8525-a3a6eb1a52f8 +a97c6ff2-fc34-11ea-9718-fbbed0da0e10 +a97c8ca8-fc34-11ea-ae43-3f26f853165a +a97ca9a4-fc34-11ea-a08d-cb6933508d66 +a97cc88a-fc34-11ea-9547-47a4b85a6130 +a97cecd4-fc34-11ea-8d0d-eb50db37d232 +a97d0e58-fc34-11ea-8032-072a6546eabf +a97d2d02-fc34-11ea-8af7-e7d53513e6e7 +a97d4a6c-fc34-11ea-bed7-5b5aaf5d0c85 +a97d6862-fc34-11ea-a3de-73c67e426e2b +a97d8658-fc34-11ea-a008-0f1213788f61 +a97da426-fc34-11ea-93df-cf7a4bbba784 +a97dc1e0-fc34-11ea-bb7e-97def7af6b12 +a97dde28-fc34-11ea-be3c-479ffb20d7a9 +a97dfd0e-fc34-11ea-bdff-d7fd3338bfdb +a97e1be0-fc34-11ea-a422-0f4551528002 +a97e3c06-fc34-11ea-9c5b-d7caa75f0197 +a97e586c-fc34-11ea-84c8-c32e957552eb +a97e786a-fc34-11ea-85d5-d72c3ed63f7a +a97e98b8-fc34-11ea-b8ce-0b604beadb5d +a97eb5d2-fc34-11ea-bb4e-a7a40b897c58 +a97ed4cc-fc34-11ea-a3ce-03e91ee28e7f +a97ef4c0-fc34-11ea-9400-a3609e0b9514 +a97f189c-fc34-11ea-9a6d-134d35dd7bb0 +a97f3804-fc34-11ea-b539-e7535fd576b8 +a97f560e-fc34-11ea-a398-677c691e3e5f +a97f760c-fc34-11ea-ac32-c3626b9ec77b +a97f942a-fc34-11ea-b1e0-2b909155c131 +a97fb36a-fc34-11ea-84a5-8fbf0ba3b58d +a97fd5ca-fc34-11ea-a8af-1333713f0381 +a97ff712-fc34-11ea-8247-970c01405f10 +a98014d6-fc34-11ea-9ad7-439abd86aae0 +a980311e-fc34-11ea-b35a-13e449e166a5 +a9804f28-fc34-11ea-877a-f701191fbfac +a9806e5e-fc34-11ea-8190-6bfe3fb48793 +a9808ede-fc34-11ea-84c0-7740f5601756 +a980ad42-fc34-11ea-942e-e7b0503ae9b4 +a980ca48-fc34-11ea-8322-f788020bf13d +a980e9f6-fc34-11ea-bb29-4f90e55b4ca5 +a98105b2-fc34-11ea-8766-7b8d3da349f2 +a98123ee-fc34-11ea-8614-6fd77c76347f +a9814310-fc34-11ea-9210-33eb02b122ce +a98162c8-fc34-11ea-ac1f-c720d2b1c44a +a98182da-fc34-11ea-91aa-bf63fbcd4b06 +a981a1fc-fc34-11ea-8650-6bf1ba2da59d +a981c2ea-fc34-11ea-b0c4-ab1500c67950 +a981e3e2-fc34-11ea-9ddf-df72f958de08 +a98201ec-fc34-11ea-bdbe-77b2896670a5 +a982233e-fc34-11ea-9021-33296781a75e +a98241ca-fc34-11ea-a324-771dafa98ffb +a9825f98-fc34-11ea-9b3c-f32dd2538184 +a9827eb0-fc34-11ea-b8b0-0376745e303b +a9829d6e-fc34-11ea-9f27-f700089da6aa +a982bab0-fc34-11ea-ab35-137808dc6b2e +a982d784-fc34-11ea-9c30-c7fb17df5235 +a982f4bc-fc34-11ea-896a-ffdca9bef5ac +a98312e4-fc34-11ea-80d3-cf9544ca860d +a98330ee-fc34-11ea-9728-830711d4a125 +a9834ee4-fc34-11ea-a426-03977d0de92b +a9836d34-fc34-11ea-9ed3-23a3adaa9c12 +a9838a76-fc34-11ea-97f6-d741de6b0617 +a983a966-fc34-11ea-9393-1f74bb2c9884 +a983c770-fc34-11ea-a15c-8f29f4baf1f1 +a983e340-fc34-11ea-8695-6b674342d984 +a984017c-fc34-11ea-a0be-eb1ceffbdd45 +a9842490-fc34-11ea-b51d-33697327be80 +a98448f8-fc34-11ea-9f71-eb8246ce1475 +a9846888-fc34-11ea-b97c-d7ee5b288899 +a984889a-fc34-11ea-804a-6716525f3c66 +a984a802-fc34-11ea-ad94-17a751e62083 +a984c80a-fc34-11ea-bf5c-e317b11faa86 +a984e510-fc34-11ea-8702-137bc3430b84 +a985068a-fc34-11ea-b01b-672d1ae16e4d +a98523e0-fc34-11ea-bf7b-cf93820c108d +a9854302-fc34-11ea-9ece-235ad62bfa11 +a9855ffe-fc34-11ea-8ff5-471ffbe373b7 +a9857e4e-fc34-11ea-b233-cf6772cfd143 +a9859cf8-fc34-11ea-a075-3f00e2fae58a +a985bd00-fc34-11ea-bd94-5b8824e4fbec +a985da1a-fc34-11ea-aae0-dffcf525988c +a985f78e-fc34-11ea-8fa1-7797ffc0fb1d +a986146c-fc34-11ea-b633-eb841f3263bc +a9863276-fc34-11ea-a8e9-eb30c03c1051 +a9865184-fc34-11ea-9793-87397421f627 +a9867042-fc34-11ea-b493-7bf0a2d002fa +a9868dd4-fc34-11ea-a9e5-13efdb27091a +a986ab5c-fc34-11ea-ae6b-53e020ff101c +a986cae2-fc34-11ea-813b-e7a6393ed00b +a986eab8-fc34-11ea-a3fd-6ffab67c5d2b +a9870e80-fc34-11ea-82e2-531cd27b59a4 +a9872e60-fc34-11ea-bbc4-93c6781eac51 +a9874d78-fc34-11ea-b74e-5764a5632cd9 +a9877172-fc34-11ea-8f6f-d358d7a8d034 +a98791de-fc34-11ea-8554-f748b49870f7 +a987adea-fc34-11ea-8d2b-8fcd98b6b9fc +a987cb0e-fc34-11ea-9f49-bf773d4b6875 +a987ea9e-fc34-11ea-86f3-cb1035101f19 +a98808c6-fc34-11ea-b472-175ccd8c09c5 +a9882cca-fc34-11ea-8e57-f35aafcb1dac +a9884bf6-fc34-11ea-b974-978a5ac7d809 +a98868de-fc34-11ea-832b-c715f113d428 +a9888792-fc34-11ea-9259-cbc00ac9d46d +a988a664-fc34-11ea-881e-df9e132a112c +a988c3ec-fc34-11ea-9e25-338fb8b93228 +a988e214-fc34-11ea-acec-b31a69cfdbac +a989015e-fc34-11ea-8b9b-5bec1d9cd379 +a9891e1e-fc34-11ea-b0b7-7bd30767b735 +a9893cbe-fc34-11ea-bad3-5fed25a3531e +a9895c3a-fc34-11ea-b7db-9702b4364783 +a98980ac-fc34-11ea-8d31-e39f05f477fe +a989a1c2-fc34-11ea-9010-f7470213bb35 +a989c27e-fc34-11ea-98f8-93384eba3112 +a989e36c-fc34-11ea-8c66-5f520b65431b +a98a0298-fc34-11ea-81ec-23aceec7d46c +a98a1ed6-fc34-11ea-a147-b751f846d552 +a98a3c9a-fc34-11ea-abaf-d3e8817b1526 +a98a5c7a-fc34-11ea-8122-2f0bc6d5884b +a98a7a0c-fc34-11ea-a238-3f1061b4d40c +a98a980c-fc34-11ea-a1b9-f3f2a24b6683 +a98ab698-fc34-11ea-8ada-a75ad035305e +a98ad664-fc34-11ea-b28b-17963f3c0ff6 +a98af48c-fc34-11ea-b0d3-772502376c0d +a98b1430-fc34-11ea-8f08-bfd2652d2213 +a98b31a4-fc34-11ea-93b0-8336e2cb7f16 +a98b4ed2-fc34-11ea-ac67-4b570360c32b +a98b6b24-fc34-11ea-ba73-53e993253c58 +a98b9054-fc34-11ea-ab3c-971aab494f42 +a98baeb8-fc34-11ea-aa78-2b509ef2a6f3 +a98bcb96-fc34-11ea-964f-87cc94a69314 +a98beb6c-fc34-11ea-a506-eb63319189b0 +a98c0fde-fc34-11ea-bcf9-eb6ad769cdf5 +a98c3220-fc34-11ea-9fc7-eb8a67b729e4 +a98c503e-fc34-11ea-b0ea-03767121639d +a98c6cf4-fc34-11ea-b279-57c1b256b047 +a98c8f9a-fc34-11ea-8f18-0f0b96779d71 +a98cae76-fc34-11ea-9f91-5360bcd59737 +a98ccc1c-fc34-11ea-874d-675ebd66853c +a98ce972-fc34-11ea-84cb-cbd62269cca5 +a98d08c6-fc34-11ea-9a92-8b8f38297087 +a98d2982-fc34-11ea-8ea3-57f6d112691a +a98d4c78-fc34-11ea-9c91-c78b05cc3407 +a98d6ab4-fc34-11ea-a4a7-7767c201fdc5 +a98d8774-fc34-11ea-8c55-0fec94f6215c +a98da5ec-fc34-11ea-87a8-6b0e4aad71da +a98dc414-fc34-11ea-a0fc-8777ea197363 +a98de110-fc34-11ea-a86c-1f6b10180fe9 +a98dfeb6-fc34-11ea-a944-eb1e7d6fdeb1 +a98e1d06-fc34-11ea-a7d6-6f5069c6688d +a98e3d4a-fc34-11ea-bfe4-6fcc20fa2350 +a98e5b5e-fc34-11ea-80ce-8b875a4c540d +a98e7ce2-fc34-11ea-9fb1-0fde29137eb9 +a98e9cb8-fc34-11ea-baa9-5bed4a3cc21c +a98eb9f0-fc34-11ea-a6d2-4b8c08d10940 +a98ed84a-fc34-11ea-b580-5fd80b28a07a +a98ef7bc-fc34-11ea-b867-cfc374671fd2 +a98f160c-fc34-11ea-8567-1be8a83f3357 +a98f3402-fc34-11ea-8413-a3eae0c38fea +a98f53f6-fc34-11ea-a43a-9fa557b9a01b +a98f73c2-fc34-11ea-9e71-779d50fed69f +a98f930c-fc34-11ea-8426-2759d1ff0c88 +a98fb09e-fc34-11ea-a690-3f60b9daf3d5 +a98fcd4a-fc34-11ea-9854-078363917513 +a98feb54-fc34-11ea-9e08-77d9bb7cb107 +a99008c8-fc34-11ea-856e-cf52adc6ac31 +a990265a-fc34-11ea-af80-479c15c8670b +a9904360-fc34-11ea-9485-5f587e919e4d +a9906264-fc34-11ea-bd54-cb1868612672 +a9908046-fc34-11ea-bbad-8fde4f097666 +a9909e8c-fc34-11ea-bf81-3f7fa1902d51 +a990bab6-fc34-11ea-907a-bf4fc0295a67 +a990d97e-fc34-11ea-9154-af2174885a03 +a990f6f2-fc34-11ea-a30d-237b420cba88 +a9911934-fc34-11ea-8824-f393e3baaa39 +a9913b26-fc34-11ea-b796-53602ce1171f +a9915bc4-fc34-11ea-b9a9-8bfae7f1dc4f +a99180e0-fc34-11ea-9eac-43c192f924e9 +a991a32c-fc34-11ea-85dc-57aec9b5c448 +a991c41a-fc34-11ea-b696-63ad7666ec1e +a991e2a6-fc34-11ea-975b-db518e549ef4 +a991ff7a-fc34-11ea-b8fb-cf89f5dc53f2 +a9921c58-fc34-11ea-8f13-3fa25e5ad4e1 +a9923c42-fc34-11ea-b201-3b54dbc2f699 +a992592a-fc34-11ea-965c-8326fb2ba6a6 +a99276da-fc34-11ea-84f7-e3dd3b52cf7c +a99292fa-fc34-11ea-8396-9378324e2948 +a992b1ea-fc34-11ea-9f5b-afd7e483d5b4 +a992ce5a-fc34-11ea-8e7d-97e1c3239c3a +a992ee4e-fc34-11ea-88e8-a73571951390 +a9930eec-fc34-11ea-9842-f3ff7a4d1c82 +a9932c7e-fc34-11ea-a9aa-2f8892554c08 +a9934ace-fc34-11ea-bec3-d7d6d48d70a7 +a99368ce-fc34-11ea-a42d-076b41ffbd87 +a9938a02-fc34-11ea-bc53-2f21604d1736 +a993a97e-fc34-11ea-8585-3f91efcdb913 +a993c9f4-fc34-11ea-9cdf-2bf0c07b2f71 +a993ee2a-fc34-11ea-89b2-df38dc25f0d0 +a9940cde-fc34-11ea-933f-b740e56ddb06 +a9942c46-fc34-11ea-bfc0-073466224265 +a9944938-fc34-11ea-92fa-4f60b825dc81 +a99466d4-fc34-11ea-9410-ff5a5cb9e719 +a994866e-fc34-11ea-a389-3bc1e16bf9c7 +a994a59a-fc34-11ea-a0c1-735578465930 +a994c5c0-fc34-11ea-a21b-b73876cc8a6c +a994e23a-fc34-11ea-aaae-77da09994c16 +a9950094-fc34-11ea-9aab-471c810282f6 +a9951e08-fc34-11ea-ae6c-5b8cd5e22738 +a9953db6-fc34-11ea-bac9-6bac2f5520b4 +a9955a30-fc34-11ea-8444-bf3ed90521ee +a9957754-fc34-11ea-a7b2-57ce0d5d76a5 +a99593d8-fc34-11ea-a802-07c36f035557 +a995b3ea-fc34-11ea-87cc-735f07c4b7a3 +a995d320-fc34-11ea-9296-4bb213576ecc +a995f210-fc34-11ea-875a-675e4a9438d6 +a99613ee-fc34-11ea-be15-7fe5d7dbf720 +a9963540-fc34-11ea-9253-ab722840b827 +a99654b2-fc34-11ea-bd3d-23b58205f170 +a9967942-fc34-11ea-a96d-4b169590bf5c +a99699e0-fc34-11ea-b753-2f4b3c20d8b8 +a996b8ee-fc34-11ea-b5dc-5f6fafd98a51 +a996d784-fc34-11ea-ab7e-8b1e0139abbc +a996f5de-fc34-11ea-92ee-bb08c6e576db +a997167c-fc34-11ea-942e-c3e12bb45ff5 +a997347c-fc34-11ea-8dcb-7b6f682bfcf8 +a9975416-fc34-11ea-a65e-3f9781befa28 +a9977540-fc34-11ea-b6d2-4b5492531ecd +a997964c-fc34-11ea-8c0a-cb640b53099f +a997ddd2-fc34-11ea-b8d6-bb2f95f4b008 +a99803ca-fc34-11ea-af58-6f7e2499feb1 +a9982508-fc34-11ea-9746-3706a55e367f +a9984d26-fc34-11ea-9bab-bfdb55cdf68e +a99887dc-fc34-11ea-8723-7f638bfaab58 +a998c8be-fc34-11ea-83d2-efa1a26e4719 +a998f9ec-fc34-11ea-983a-fb417cbf6223 +a9991a4e-fc34-11ea-9203-33183aba3444 +a9993876-fc34-11ea-a482-f32171358a57 +a9995ae0-fc34-11ea-9b12-8b27093ff09a +a9997b2e-fc34-11ea-b7ee-db2d74a27ad1 +a9999c12-fc34-11ea-a4c7-d77b141d875a +a999ba3a-fc34-11ea-bfb5-ab1ebbaaa640 +a999d844-fc34-11ea-bb37-b776ef53795c +a999f504-fc34-11ea-be9e-670f85be351f +a99a1598-fc34-11ea-96da-87a12335f00b +a99a3532-fc34-11ea-a68e-eba4f45c659c +a99a574c-fc34-11ea-85c7-2b36b6260b15 +a99a733a-fc34-11ea-aa92-334f620a8d69 +a99a91c6-fc34-11ea-b3de-a7c7aaaa9e32 +a99aaf6c-fc34-11ea-a1f4-fb08cf6de486 +a99acd80-fc34-11ea-affb-5b545cd80a5e +a99aed9c-fc34-11ea-978d-5391b8320a70 +a99b0c78-fc34-11ea-9fa6-431253c1b414 +a99b2b36-fc34-11ea-ab5f-030dcb174f62 +a99b481e-fc34-11ea-8c5b-cf17fd51bc94 +a99b68ee-fc34-11ea-beb2-53a4e39146c9 +a99b86f8-fc34-11ea-b054-db6ca01caa62 +a99ba584-fc34-11ea-8054-ab22d289682a +a99bc4b0-fc34-11ea-82b2-db0c5f92522b +a99be328-fc34-11ea-ab63-8ffeb075c020 +a99c02fe-fc34-11ea-949f-3b05f9adbc09 +a99c21ee-fc34-11ea-aade-771b375fae2c +a99c402a-fc34-11ea-8bf6-770f5d37c448 +a99c5e16-fc34-11ea-ab5c-13f8a848da31 +a99c7a7c-fc34-11ea-9775-779b8dddeb94 +a99c98f4-fc34-11ea-9225-d396bf737406 +a99cb60e-fc34-11ea-b68c-1fb7d4e12a64 +a99cd3e6-fc34-11ea-8bf1-9b2835808740 +a99cf128-fc34-11ea-ab95-ebc998c00f7f +a99d0f3c-fc34-11ea-9f1a-af713edad3b3 +a99d2e2c-fc34-11ea-b3c6-d73dca850abe +a99d4cb8-fc34-11ea-b744-670a8447a828 +a99d6ba8-fc34-11ea-ad21-1fe55954686f +a99d8a16-fc34-11ea-9a5d-8f6b6dd605ab +a99da87a-fc34-11ea-aff0-d7063dfd2119 +a99dcae4-fc34-11ea-9b36-fba7590ae698 +a99ded44-fc34-11ea-8192-0f4941d6a4ff +a99e0c02-fc34-11ea-9ab5-abca8c475f39 +a99e2b56-fc34-11ea-b7f9-37bed8cb15a2 +a99e4a82-fc34-11ea-8b5f-839ef94ba1eb +a99e6a94-fc34-11ea-b2fb-efb7ed0c6c36 +a99e8830-fc34-11ea-8b47-0bc9a8734254 +a99ea5d6-fc34-11ea-b1c0-9347be9ed914 +a99ec3e0-fc34-11ea-a488-3ff501d27473 +a99ee294-fc34-11ea-8e8a-bfdb1b2d3f5c +a99f01a2-fc34-11ea-a22e-f7cb9e698200 +a99f1e4e-fc34-11ea-86a4-3fec9a9db31e +a99f3ba4-fc34-11ea-a266-a3f8cab98459 +a99f5abc-fc34-11ea-a065-479c2affa286 +a99f7768-fc34-11ea-87fd-17be47581331 +a99f957c-fc34-11ea-be71-0b417b8301b2 +a99fb408-fc34-11ea-b21d-7ff8a975d930 +a99fd30c-fc34-11ea-8ff9-c3ce01b245b4 +a99ff094-fc34-11ea-858b-ff2106470a94 +a9a00fc0-fc34-11ea-afa8-63ca46f0f8a8 +a9a02db6-fc34-11ea-855c-d3f8a222f094 +a9a04fc6-fc34-11ea-88ae-33857aa9f977 +a9a071b8-fc34-11ea-aefc-fb8a42c5171e +a9a091d4-fc34-11ea-8acf-5b13515959ba +a9a0b15a-fc34-11ea-b5a5-a37225b2af77 +a9a0d7c0-fc34-11ea-84b9-a74ff4543e9e +a9a0f8d6-fc34-11ea-80a0-fbfd1aed6e31 +a9a116e0-fc34-11ea-8fa8-234fc7542106 +a9a13472-fc34-11ea-8c3b-677de2d4fb72 +a9a15100-fc34-11ea-9fd2-932b3e120a32 +a9a170b8-fc34-11ea-87da-2f4a7e14cfa4 +a9a18fbc-fc34-11ea-a008-8f0c15a36414 +a9a1adc6-fc34-11ea-a70e-2b12754d8f27 +a9a1cad6-fc34-11ea-b1d5-3717f871a343 +a9a1e8cc-fc34-11ea-b937-eb840f6d8555 +a9a207d0-fc34-11ea-9507-b7e25fb2d133 +a9a22558-fc34-11ea-9df3-2f7d58e485e4 +a9a2442a-fc34-11ea-996b-cbcc1ddf7c96 +a9a26338-fc34-11ea-95c9-eb238c017b98 +a9a28322-fc34-11ea-a4d0-17af10b7e3f7 +a9a2a604-fc34-11ea-af7a-271bfa009d03 +a9a2c8d2-fc34-11ea-9052-93eb971dd85a +a9a2e786-fc34-11ea-b850-77745a0b20f4 +a9a307e8-fc34-11ea-94af-03a3594f36db +a9a32700-fc34-11ea-b4ee-e7b8e03543be +a9a347d0-fc34-11ea-90e7-03518c4a94b9 +a9a366e8-fc34-11ea-87f9-3b8cba8277db +a9a386aa-fc34-11ea-9fcd-dbcfbc8803a9 +a9a3a324-fc34-11ea-90a6-432eaf946b2a +a9a3bfee-fc34-11ea-a880-5be9ec292302 +a9a3e316-fc34-11ea-9b24-6b6cb14ccb36 +a9a4038c-fc34-11ea-bd3b-3773ec9e76dc +a9a42088-fc34-11ea-a143-43e878a8d31e +a9a43ea6-fc34-11ea-9a87-bbbc0bf5ef31 +a9a45cd8-fc34-11ea-9150-9fecafb760c9 +a9a479ac-fc34-11ea-be02-7b4d23f03252 +a9a49824-fc34-11ea-bc85-eb6c2e9680bf +a9a4b7d2-fc34-11ea-b0ba-ff5c16217a06 +a9a4d686-fc34-11ea-bb82-db225b17846a +a9a4f288-fc34-11ea-a204-8355e3c3a811 +a9a50fd4-fc34-11ea-98f9-678a90c25ccd +a9a52d52-fc34-11ea-a65d-2f29ff5d1d06 +a9a54db4-fc34-11ea-8e8e-1f7a8c5700bb +a9a56c18-fc34-11ea-a079-0b198e10130d +a9a58b94-fc34-11ea-b3d3-2313e0f3f880 +a9a5af66-fc34-11ea-9593-6716dddce1f9 +a9a5d536-fc34-11ea-86b3-4723c4b43c92 +a9a5f2d2-fc34-11ea-84e5-cbe07595949a +a9a60fd8-fc34-11ea-a427-d3ab2e41ea49 +a9a62e64-fc34-11ea-8c36-43f5bf483e24 +a9a64c96-fc34-11ea-aee0-230c7831e4d8 +a9a66a1e-fc34-11ea-ab78-377833b9e717 +a9a68a6c-fc34-11ea-8d28-8bebf3d09950 +a9a6a74a-fc34-11ea-bd12-e73666e4ae42 +a9a6c626-fc34-11ea-a892-f39cc81c662f +a9a6e412-fc34-11ea-9190-6bacaaefc681 +a9a70366-fc34-11ea-9f0b-6b858e056f1f +a9a721c0-fc34-11ea-9257-2f4468f9f17d +a9a73e6c-fc34-11ea-9037-f701422dcc5d +a9a75de8-fc34-11ea-beac-db6946c5abfb +a9a77a76-fc34-11ea-95b8-d716268bc1bf +a9a79934-fc34-11ea-be21-67128ac9125f +a9a7b61c-fc34-11ea-b894-7792a1577b52 +a9a7d4e4-fc34-11ea-b8b3-b74a1d9f1849 +a9a7f820-fc34-11ea-a9fe-23e235e98086 +a9a81b16-fc34-11ea-95c6-53ec012c9fc9 +a9a83bc8-fc34-11ea-97bf-67d722f7eff6 +a9a85ca2-fc34-11ea-96d9-071bbe51cda3 +a9a8806a-fc34-11ea-be4f-478d40b71022 +a9a89f46-fc34-11ea-a1c6-575681e19db2 +a9a8bcd8-fc34-11ea-933f-bb43f180fdff +a9a8dc9a-fc34-11ea-913e-2fb73d07bd95 +a9a8f860-fc34-11ea-9497-47835a473e77 +a9a915fc-fc34-11ea-91e9-0b7a8d3a1be8 +a9a93528-fc34-11ea-ad7b-67bdd600791b +a9a95620-fc34-11ea-b9ef-bf36abc65796 +a9a97484-fc34-11ea-824c-97aada765346 +a9a9936a-fc34-11ea-ae93-c3850e41d1af +a9a9b016-fc34-11ea-a917-7b481d3d5b85 +a9a9cc4a-fc34-11ea-a159-a7d1dbe6fd2b +a9a9e70c-fc34-11ea-a011-83c0486437ef +a9aa02c8-fc34-11ea-83dc-f36ea19d31a4 +a9aa1dee-fc34-11ea-8271-cb44559013d7 +a9aa3aa4-fc34-11ea-99cc-3bc259bf6383 +a9aa57be-fc34-11ea-98bc-8b111bfa05fc +a9aa78b6-fc34-11ea-8688-97db1adefc92 +a9aa99c2-fc34-11ea-9b41-7786c8ab2388 +a9aab92a-fc34-11ea-ae1d-7f108155ae62 +a9aad720-fc34-11ea-95e8-c79b28830a34 +a9aaf58e-fc34-11ea-8cf5-1339b6de0afd +a9ab1370-fc34-11ea-8f65-eb60058f1a9f +a9ab7a68-fc34-11ea-8fee-dfeb54879c44 +a9ab9b1a-fc34-11ea-9a6d-7fbc7d653f4d +a9abbb72-fc34-11ea-b393-5f720349ba66 +a9abdb0c-fc34-11ea-99be-37b129a07140 +a9abf790-fc34-11ea-b876-1347f20c7979 +a9ac1586-fc34-11ea-a150-2fcbd7fe1fa3 +a9ac3570-fc34-11ea-be73-bfa3e0670308 +a9ac5582-fc34-11ea-aa73-bf453a2a0f7f +a9ac73dc-fc34-11ea-9fd6-3bb72fbfe367 +a9ac966e-fc34-11ea-b874-db5b16f29c15 +a9acb400-fc34-11ea-9b88-0fe623ec06f3 +a9acd3fe-fc34-11ea-bc20-eb917d6788b3 +a9acfbcc-fc34-11ea-820a-439b439d9fd1 +a9ad1ac6-fc34-11ea-88ec-3fbf24ea70eb +a9ad3fce-fc34-11ea-927d-e3346bf0420d +a9ad6300-fc34-11ea-9b0d-cfd56c2daf52 +a9ad833a-fc34-11ea-81e5-13c036b02494 +a9ada8ce-fc34-11ea-963d-3fb47196de6c +a9adc728-fc34-11ea-843b-6f51b1f98b7e +a9ade7da-fc34-11ea-994b-1322c5004f93 +a9ae02e2-fc34-11ea-b021-1f2074564141 +a9ae1cb4-fc34-11ea-93b6-0357b5cacf28 +a9ae3e06-fc34-11ea-b6b3-ab7a4ae50645 +a9ae5864-fc34-11ea-a627-1b195ac1913f +a9ae7a24-fc34-11ea-a87e-07124cffe665 +a9ae946e-fc34-11ea-be82-132a7315a2cb +a9aead28-fc34-11ea-8a67-ff4d66aebf96 +a9aecaba-fc34-11ea-93ac-ab0a29a6b8b8 +a9aee702-fc34-11ea-8390-772890a792ed +a9af0b4c-fc34-11ea-a739-13e30a527d76 +a9af3464-fc34-11ea-80c8-4354dbfa23d5 +a9af5548-fc34-11ea-b1dd-830fb7ccccf1 +a9af767c-fc34-11ea-9536-1f483e64a2c4 +a9afada4-fc34-11ea-acab-3790ed1ced7f +a9afcf46-fc34-11ea-9967-03967781a568 +a9aff8cc-fc34-11ea-9a46-5385feb41478 +a9b01c3a-fc34-11ea-b151-e35c1b2f6f9e +a9b03d78-fc34-11ea-a7f3-cbc3fb59501b +a9b05f2e-fc34-11ea-aa40-8bb37a91cdb9 +a9b080da-fc34-11ea-8320-a784f70c1e7c +a9b0a4a2-fc34-11ea-af26-973053eb35c8 +a9b0c57c-fc34-11ea-8111-b36e3b32849e +a9b0e570-fc34-11ea-9dbe-cbdced92adf2 +a9b103f2-fc34-11ea-ba6d-232655ae9a07 +a9b125ee-fc34-11ea-917b-fb330141dfab +a9b147fe-fc34-11ea-8f6e-d340e5b4f10b +a9b16b1c-fc34-11ea-8310-43c04a439871 +a9b18b92-fc34-11ea-b33a-b7fba114f8b9 +a9b1a9f6-fc34-11ea-8784-131bdd492685 +a9b1cbe8-fc34-11ea-9ed8-777bddc59521 +a9b1ed58-fc34-11ea-8d39-33b8c73eee86 +a9b21026-fc34-11ea-bb39-cb2fa4ee5d1d +a9b23132-fc34-11ea-8ec5-bf871283dca5 +a9b25266-fc34-11ea-8e49-d74cb70afce7 +a9b27386-fc34-11ea-bf97-cb3d98628b74 +a9b29a8c-fc34-11ea-bb6c-ffc97a542ea5 +a9b2c0b6-fc34-11ea-a81c-8b629c619085 +a9b2e2bc-fc34-11ea-95dd-9beafe67e483 +a9b30382-fc34-11ea-8c46-275d16ea60c0 +a9b3229a-fc34-11ea-ad7c-73e1a5ec1c0d +a9b3420c-fc34-11ea-964c-f7a246fc8b55 +a9b361c4-fc34-11ea-bdc4-3b16c4674219 +a9b3833e-fc34-11ea-806e-fba81f182d1f +a9b3a382-fc34-11ea-bffd-7f47ddf13c8f +a9b3c434-fc34-11ea-90c9-4fc7200456ff +a9b3e4d2-fc34-11ea-8dfd-8bfe84238278 +a9b40516-fc34-11ea-b527-275ff9bc13ae +a9b425dc-fc34-11ea-9c31-17d92bf74155 +a9b44684-fc34-11ea-821e-9f9e1b8a1ac6 +a9b467fe-fc34-11ea-b1f6-7f6f68c57a9f +a9b48a72-fc34-11ea-a567-634d0b7773c5 +a9b4b010-fc34-11ea-bd02-87939209ba4f +a9b4d496-fc34-11ea-97b8-ff0279bb84fe +a9b4fb6a-fc34-11ea-87ac-eb3fa520bdbe +a9b51ce4-fc34-11ea-92db-37c210f3c1bd +a9b53fda-fc34-11ea-ad01-bfc88696b184 +a9b56168-fc34-11ea-a371-1bae9afacab1 +a9b58382-fc34-11ea-ad57-9f60236250d1 +a9b5a7c2-fc34-11ea-bcff-13bcc2bb822f +a9b5c9f0-fc34-11ea-a0fe-cfe61dd94221 +a9b5e8f4-fc34-11ea-82ad-dfc1eb27bdad +a9b60a50-fc34-11ea-9df7-77c5391dae21 +a9b6295e-fc34-11ea-8871-478e35b9515c +a9b64808-fc34-11ea-b38d-638aa025e435 +a9b66a04-fc34-11ea-9d14-cfe75f7e93ba +a9b68b42-fc34-11ea-afd2-2391270eecad +a9b6aba4-fc34-11ea-82d2-078277c57b32 +a9b6cbfc-fc34-11ea-be65-ab46da35a655 +a9b6e9c0-fc34-11ea-bbdc-3b9ef710cb4f +a9b709dc-fc34-11ea-bffa-636dac371003 +a9b728c2-fc34-11ea-ac11-5f276d032dfa +a9b74d2a-fc34-11ea-93a7-c749d6b8764c +a9b76f1c-fc34-11ea-b762-0b86b4ae6c55 +a9b79744-fc34-11ea-9415-1bfe850a5bc6 +a9b7bc92-fc34-11ea-b90e-eb7913da3ab9 +a9b7dd8a-fc34-11ea-8c4d-73e961da6bff +a9b7fec8-fc34-11ea-82f5-fbfbb62357b4 +a9b8222c-fc34-11ea-a482-3776c9c9c10c +a9b8423e-fc34-11ea-b8f9-eb403b10554f +a9b86412-fc34-11ea-a7b0-07f861658596 +a9b883b6-fc34-11ea-b95c-6b99014c63e7 +a9b8a2d8-fc34-11ea-b81d-4f65567ab8d5 +a9b8c63c-fc34-11ea-9190-7f022b758777 +a9b8e7b6-fc34-11ea-82c5-276a6768dfb0 +a9b90750-fc34-11ea-9233-370fbe929b6d +a9b92820-fc34-11ea-9b34-cf81e3201f3d +a9b94882-fc34-11ea-b8a6-a7216020d6d5 +a9b967f4-fc34-11ea-9339-87d7f7c6dbec +a9b9870c-fc34-11ea-a06a-cfe1afb4deed +a9b9a886-fc34-11ea-a64d-7fd0458ecb0f +a9b9cabe-fc34-11ea-a953-8708d2bc6972 +a9b9f28c-fc34-11ea-9c60-c36109250ba3 +a9ba1578-fc34-11ea-b041-1f332beb07be +a9ba3666-fc34-11ea-8c89-4bc5ef7e478a +a9ba5858-fc34-11ea-9f85-1b0603e4fbaa +a9ba79c8-fc34-11ea-9118-ff7be346f859 +a9ba9b88-fc34-11ea-9114-4327f8a81749 +a9babba4-fc34-11ea-9d92-5fedef694d0a +a9badcba-fc34-11ea-a01a-8f8866dab2ed +a9bafc40-fc34-11ea-bb51-4fed937525be +a9bb1b08-fc34-11ea-932c-3bc5205e3d9a +a9bb3ca0-fc34-11ea-93f3-23b85f52de6d +a9bb5bae-fc34-11ea-bcdd-0b440dd28489 +a9bb7c74-fc34-11ea-8878-cbbddc332ccc +a9bba046-fc34-11ea-8f79-9bd23463d151 +a9bbc396-fc34-11ea-a0c7-a7759cf347a8 +a9bbe272-fc34-11ea-a85a-07ef6b1254fe +a9bc0388-fc34-11ea-813e-7731124f8617 +a9bc253e-fc34-11ea-9130-53099d5c7a94 +a9bc4582-fc34-11ea-9abb-7bd56cf66cfb +a9bc663e-fc34-11ea-a7f2-3b79404aff03 +a9bc890c-fc34-11ea-8e90-23deb659e756 +a9bcaa22-fc34-11ea-bc1b-b3af2fff1b91 +a9bccdb8-fc34-11ea-b714-1fbcdfb2acfe +a9bcf342-fc34-11ea-b8e9-2bb1f2335d6b +a9bd1282-fc34-11ea-9e66-c74dd5653773 +a9bd3334-fc34-11ea-b397-7f0860add4d8 +a9bd54c2-fc34-11ea-83be-fb9af9aac78b +a9bd78d0-fc34-11ea-9d96-2b1631a1b2f8 +a9bd9bb2-fc34-11ea-884e-9f96c73e6075 +a9bdbd86-fc34-11ea-bb06-ff5cd1f3af17 +a9bddd16-fc34-11ea-b0ba-5b2a64829300 +a9be002a-fc34-11ea-9828-6b4d2b48b5c5 +a9be2000-fc34-11ea-81c6-fbbfe18090f7 +a9be4292-fc34-11ea-8f0b-1b6c83ee8044 +a9be64e8-fc34-11ea-8766-53a30d090694 +a9be85f4-fc34-11ea-9762-47b5ff18c3ea +a9bea7b4-fc34-11ea-8425-a364174f752c +a9becabe-fc34-11ea-b2d7-c7826ebe5f90 +a9beec10-fc34-11ea-98e2-639cc8753c56 +a9bf0c4a-fc34-11ea-ab0a-2f2315b85bc7 +a9bf2d24-fc34-11ea-bbf8-a310802d576d +a9bf4fb6-fc34-11ea-9b93-d33abc183f22 +a9bf6f00-fc34-11ea-bb43-9b0940e57444 +a9bf9142-fc34-11ea-836f-2bba7a00191a +a9bfb2d0-fc34-11ea-95a3-5739744ae61e +a9bfd260-fc34-11ea-8e2d-4badffe36e1e +a9bff326-fc34-11ea-85a5-d729d575fe33 +a9c01aea-fc34-11ea-b69a-032b43a26f6a +a9c03a02-fc34-11ea-8df8-0744e01ccfff +a9c05c76-fc34-11ea-9456-4390b348b4ca +a9c07df0-fc34-11ea-ad97-af06d4d6130e +a9c09d62-fc34-11ea-9915-e3a203c01b24 +a9c0bff4-fc34-11ea-ba04-772d5dc1ff34 +a9c0e04c-fc34-11ea-8064-bfd3601be41f +a9c10112-fc34-11ea-a510-c702cc3356b2 +a9c12804-fc34-11ea-8a6c-777f0a88612e +a9c14ab4-fc34-11ea-8ebd-b34439cc6a6d +a9c16d82-fc34-11ea-92bd-832f43c692f2 +a9c190f0-fc34-11ea-9c20-27657ce646b6 +a9c1b8a0-fc34-11ea-aee0-e3eab56556a1 +a9c1dbf0-fc34-11ea-8324-93a72a0f94d6 +a9c1fd38-fc34-11ea-8378-1374dfe4dfc3 +a9c21dcc-fc34-11ea-9af5-2b356cd0acb5 +a9c23fa0-fc34-11ea-a4eb-afa1526832b8 +a9c264da-fc34-11ea-9d1b-fbbea678fd9d +a9c284e2-fc34-11ea-94bb-3bcb4f94a8a6 +a9c2a6ac-fc34-11ea-8e01-83fcc298ea79 +a9c2c736-fc34-11ea-aaaf-7f4b6d51002d +a9c2e8b0-fc34-11ea-85e5-27215979fdc1 +a9c30778-fc34-11ea-b7f9-6b14d047c8b9 +a9c3274e-fc34-11ea-99a3-5fad7c6141b9 +a9c348a0-fc34-11ea-ac13-cb84b5252287 +a9c36916-fc34-11ea-814d-c796f3abbb79 +a9c38dc4-fc34-11ea-84c8-b7fd3c35dab0 +a9c3b0ec-fc34-11ea-8325-13c134bac6ee +a9c3d194-fc34-11ea-a9b6-73bacd2a0088 +a9c3f232-fc34-11ea-aa81-3bf0dc11bf0f +a9c4135c-fc34-11ea-aa97-5797d5e963d0 +a9c43b66-fc34-11ea-8b64-375dc9b23d50 +a9c45df8-fc34-11ea-bde0-6ff63d6b46f3 +a9c47ec8-fc34-11ea-9ac1-6ba72ee80c2b +a9c4a09c-fc34-11ea-820e-6b51cb134f3a +a9c4c144-fc34-11ea-85e5-c732b3257e50 +a9c4e1ce-fc34-11ea-b312-73a28ced8e2f +a9c502d0-fc34-11ea-9d1c-a77d0cdee466 +a9c521e8-fc34-11ea-a318-cbbceac0fc4e +a9c544fc-fc34-11ea-ae8a-6709d50db534 +a9c567b6-fc34-11ea-8488-b756577228f0 +a9c58a5c-fc34-11ea-9e7d-2722068b6eb4 +a9c5ae2e-fc34-11ea-8c01-5331d9b422f5 +a9c5cee0-fc34-11ea-a3b2-23a80cebe2a3 +a9c5edbc-fc34-11ea-bf10-2f622ed9ef7e +a9c61044-fc34-11ea-b9f4-17ef37be8dd9 +a9c63088-fc34-11ea-905d-4308a608317b +a9c655b8-fc34-11ea-aee3-afc2e73e9d91 +a9c677aa-fc34-11ea-94aa-23e6958fb1d2 +a9c6994c-fc34-11ea-8cee-7b04c26649cd +a9c6c322-fc34-11ea-9525-7342d21706b4 +a9c6e622-fc34-11ea-b419-472453ad6520 +a9c70738-fc34-11ea-b498-f734c74561c0 +a9c72a9c-fc34-11ea-b91f-a7cebe6beaa6 +a9c74bda-fc34-11ea-9e3c-776dc9f2023f +a9c76b38-fc34-11ea-91e2-8b18d979f5a0 +a9c78a8c-fc34-11ea-b93d-e31acf0bc84b +a9c7a9cc-fc34-11ea-82cf-6734c7c0f0ae +a9c7cfc4-fc34-11ea-a4be-03ca0e4accec +a9c7f2c4-fc34-11ea-970d-13ea116b3d47 +a9c81682-fc34-11ea-b1f3-0fc02352016e +a9c84080-fc34-11ea-b983-436963814c8c +a9c864a2-fc34-11ea-a58c-03bde6e82682 +a9c885ea-fc34-11ea-958f-1bb759918581 +a9c8ace6-fc34-11ea-bd1a-83ac7574c0f8 +a9c8d11c-fc34-11ea-a659-6304d79911c6 +a9c951d2-fc34-11ea-845a-87b1ab764149 +a9c978e2-fc34-11ea-8228-aba60ecb9a8f +a9c99c5a-fc34-11ea-8614-637d70528aa8 +a9c9bcee-fc34-11ea-9182-27d3f08cb1d2 +a9c9dd96-fc34-11ea-9eff-af337f4035a0 +a9c9ffb0-fc34-11ea-a02c-03b8c159447f +a9ca1ec8-fc34-11ea-b29a-13421c992519 +a9ca4092-fc34-11ea-95eb-0fe527bfe43a +a9ca6054-fc34-11ea-8a38-3f513eae0445 +a9ca7e90-fc34-11ea-bf23-c31493176428 +a9caa028-fc34-11ea-bf2b-fb8f8f6a897c +a9cac26a-fc34-11ea-85d0-27b0f90f8c96 +a9cae376-fc34-11ea-b800-3b3320681cee +a9cb02de-fc34-11ea-9437-cfde9662870a +a9cb246c-fc34-11ea-af7b-7377c59563ff +a9cb44c4-fc34-11ea-918a-771638e80b05 +a9cb64fe-fc34-11ea-964e-5353dd46fb57 +a9cb8bdc-fc34-11ea-a171-8bf13d8e4253 +a9cbae96-fc34-11ea-a01c-0b39147504c0 +a9cbd7a4-fc34-11ea-ac77-a769377af502 +a9cbfc7a-fc34-11ea-9315-2be2099e8b7f +a9cc2592-fc34-11ea-a221-87256bdf9519 +a9cc4a22-fc34-11ea-ba5c-279c51073c8b +a9cc6e58-fc34-11ea-9a28-db8234e2c1dd +a9cc9040-fc34-11ea-a47a-d7c21db1f209 +a9ccb4b2-fc34-11ea-8e0f-1fb813172460 +a9ccd67c-fc34-11ea-a1df-43438fac2a71 +a9ccf85a-fc34-11ea-a381-239396a390ca +a9cd19fc-fc34-11ea-9a38-7b57866cc011 +a9cd3d38-fc34-11ea-a7f6-e7c45e9c63f8 +a9cd6024-fc34-11ea-bc3e-47c8f3bb264f +a9cd85b8-fc34-11ea-b482-3f9b4fca48d9 +a9cdad2c-fc34-11ea-a36e-07d5e3a03121 +a9cdcf64-fc34-11ea-b1ce-dff5bceec689 +a9cdf138-fc34-11ea-b47a-73bf7faf5659 +a9ce1636-fc34-11ea-9ea3-93f007e4e4c9 +a9ce3ab2-fc34-11ea-abf0-63d1d1473100 +a9ce623a-fc34-11ea-841f-57d07ee3f81c +a9ce836e-fc34-11ea-8373-7b1076a69496 +a9cea7f4-fc34-11ea-8d30-3b75159ef86d +a9cecca2-fc34-11ea-beed-07bab42aa340 +a9cee80e-fc34-11ea-94e0-7f4bcd3c57af +a9cf03e8-fc34-11ea-ba3e-d76ea14ba230 +a9cf1f54-fc34-11ea-a2cc-377334480ce8 +a9cf3d9a-fc34-11ea-98c4-3327cc6b39cc +a9cf5fc8-fc34-11ea-a4f1-5b510e449edc +a9cf7c4c-fc34-11ea-b108-47e87ef39b73 +a9cfa064-fc34-11ea-ad3b-d77ffa0e5639 +a9cfbb76-fc34-11ea-98b4-c390daac996f +a9cfdbe2-fc34-11ea-9d5f-974fcff8fbaa +a9cffce4-fc34-11ea-9f39-d37c439f3260 +a9d01ecc-fc34-11ea-864e-2f6e1cf394ee +a9d03fd8-fc34-11ea-bbe8-c7ed7f6300e7 +a9d0612a-fc34-11ea-a9de-2bce87e31e5d +a9d08ae2-fc34-11ea-9531-db0ca0125519 +a9d0adba-fc34-11ea-bc8e-6f3f25527678 +a9d0cda4-fc34-11ea-a70e-2b4ef624b076 +a9d0f59a-fc34-11ea-8350-0f0dba8764ad +a9d11732-fc34-11ea-a13b-0f17b666bbf6 +a9d14004-fc34-11ea-80e3-ef3b98e30121 +a9d160f2-fc34-11ea-bb08-eb0a4cabe5e1 +a9d182c6-fc34-11ea-bf36-8ff9a9442fc2 +a9d1a184-fc34-11ea-8bc7-bbffddc6d672 +a9d1bf7a-fc34-11ea-a92d-47018af4087c +a9d1dd2a-fc34-11ea-b0fc-074bb5587840 +a9d1fa26-fc34-11ea-931c-bf1ce7950a81 +a9d214de-fc34-11ea-99db-b7c147172101 +a9d236d0-fc34-11ea-9dd3-6b6c41f597e0 +a9d257fa-fc34-11ea-a49b-f78dcbd3c288 +a9d27794-fc34-11ea-8f6f-ef9649945941 +a9d29436-fc34-11ea-b627-4f7ef174eb1f +a9d2b236-fc34-11ea-927d-07455ab5753d +a9d2d2d4-fc34-11ea-92c9-c3f47c850462 +a9d2f552-fc34-11ea-837e-2b43cf41cea4 +a9d31b0e-fc34-11ea-ac0c-0388d62cfc85 +a9d33b2a-fc34-11ea-b340-3f2f06b2c7fe +a9d35f06-fc34-11ea-ba28-fb8ab0f2cfee +a9d38666-fc34-11ea-a37f-93d45b432ad1 +a9d3a81c-fc34-11ea-8f4e-dba9b02de6e3 +a9d3cad6-fc34-11ea-bd90-7bbddf13a707 +a9d3ede0-fc34-11ea-a736-1f331c3289f4 +a9d40fa0-fc34-11ea-8731-37aba7e34902 +a9d42fc6-fc34-11ea-b4a9-579e0581ef2e +a9d451fe-fc34-11ea-aa4e-470ed6185b25 +a9d46f86-fc34-11ea-8c32-8fe9cecd076c +a9d48cf0-fc34-11ea-970b-a7ce25885249 +a9d4ad70-fc34-11ea-8e8c-a36f1ad7b837 +a9d4cd82-fc34-11ea-8ee0-df8b4e4e43e8 +a9d4edee-fc34-11ea-b5e2-2773f0b787f5 +a9d50dc4-fc34-11ea-8f04-ebd8b1b79129 +a9d52c5a-fc34-11ea-af01-c748eca409d1 +a9d54dde-fc34-11ea-a5dc-2fd9e1b9a16e +a9d56d3c-fc34-11ea-8129-e3d681d7ff78 +a9d598fc-fc34-11ea-923f-175619a68894 +a9d5bda0-fc34-11ea-92b8-fb7f557775d1 +a9d5e1a4-fc34-11ea-a040-bfadf630839d +a9d60788-fc34-11ea-bbae-1be1099b9326 +a9d6270e-fc34-11ea-8075-c7b05b17d558 +a9d644fa-fc34-11ea-b35a-0f096be4a73a +a9d663f4-fc34-11ea-ba81-274e9ee57738 +a9d68686-fc34-11ea-aabd-af1e432ed7b8 +a9d6a7f6-fc34-11ea-adca-1b75d30c7b38 +a9d6c61e-fc34-11ea-92e5-5fba6f6af894 +a9d6e342-fc34-11ea-be04-2f7d7fa128bc +a9d701ce-fc34-11ea-a753-eb7c7cbb054e +a9d7215e-fc34-11ea-aa49-97947d112a62 +a9d741f2-fc34-11ea-b7ca-cf555a9f95e5 +a9d7675e-fc34-11ea-9132-23d1fdd2bf76 +a9d7857c-fc34-11ea-adb2-9386efdc7239 +a9d7a3d6-fc34-11ea-968b-27c4788c07cb +a9d7c41a-fc34-11ea-99b7-1329b0c6d1ea +a9d7e134-fc34-11ea-8e3a-f32288c1ada6 +a9d7fee4-fc34-11ea-bcb0-c382929ab965 +a9d821a8-fc34-11ea-9cd7-8bc879b30660 +a9d84840-fc34-11ea-8b63-9f6609e870a0 +a9d86e9c-fc34-11ea-8691-57203431a64c +a9d88d5a-fc34-11ea-b124-1322f342a467 +a9d8ab64-fc34-11ea-abbf-3bf13b666b16 +a9d8d102-fc34-11ea-aad8-231975c06d09 +a9d8f2e0-fc34-11ea-92da-a72e17cd4f9c +a9d9136a-fc34-11ea-9f17-cfff385ed6cf +a9d9325a-fc34-11ea-8208-ef26cb38ab7b +a9d95154-fc34-11ea-96b1-bf860bb2cae3 +a9d97184-fc34-11ea-ac22-27c2491f26f9 +a9d9909c-fc34-11ea-b693-bf2c321f2ed1 +a9d9afbe-fc34-11ea-9247-1ba1ad5abb9c +a9d9cfbc-fc34-11ea-8742-6762bc587d4a +a9d9f082-fc34-11ea-85c4-7fe65fb49399 +a9da0ee6-fc34-11ea-936b-7fed9201288f +a9da3290-fc34-11ea-9338-a709e8a54906 +a9da52e8-fc34-11ea-92f6-1bff69ca5769 +a9da77b4-fc34-11ea-ae2b-bb4efe286b25 +a9da99b0-fc34-11ea-a256-ef5a14629a59 +a9daba8a-fc34-11ea-8533-3f8ec0079c5e +a9dadab0-fc34-11ea-aca2-c76ee38b60b6 +a9daf98c-fc34-11ea-8a37-b741efd9aa2d +a9db1a84-fc34-11ea-b04f-2329a77f7651 +a9db3cbc-fc34-11ea-8ce2-e389f52fea30 +a9db6430-fc34-11ea-8c33-2bed94b04b63 +a9db8c76-fc34-11ea-8308-7360bc4c6575 +a9dbb1ec-fc34-11ea-a5c1-271dc9c0ed32 +a9dbd1ae-fc34-11ea-91a9-038b75c5bc3f +a9dbf72e-fc34-11ea-9e07-737ba04bd0f3 +a9dc18c6-fc34-11ea-a456-fb17add8a09c +a9dc3a7c-fc34-11ea-8ece-bb511d02393a +a9dc5b4c-fc34-11ea-882c-7f1633e17a09 +a9dc7c94-fc34-11ea-ab30-f37a73883188 +a9dca034-fc34-11ea-867b-db8d3bf51a68 +a9dcc096-fc34-11ea-97f4-735b25ebe3f9 +a9dce68e-fc34-11ea-ad42-e33039ebacba +a9dd0740-fc34-11ea-a80e-53da66cc6211 +a9dd26c6-fc34-11ea-b5c7-bfcf4787e7c9 +a9dd45a2-fc34-11ea-8d49-93ec28560e72 +a9dd6820-fc34-11ea-924a-83fefaa16e8c +a9dd89c2-fc34-11ea-9746-63c111592262 +a9ddaa56-fc34-11ea-ba2e-1b29195f7774 +a9ddd06c-fc34-11ea-a8c9-fb252f9e437a +a9ddf3f8-fc34-11ea-8845-eb0e9ef43f4a +a9de16d0-fc34-11ea-8c5d-db6c55b79ac8 +a9de3cfa-fc34-11ea-99c0-2b3a39892457 +a9de5f8c-fc34-11ea-908d-eb7dbcec69b8 +a9de7fe4-fc34-11ea-9f4d-ff01e9671035 +a9dea212-fc34-11ea-b900-939b9c8296f0 +a9dec10c-fc34-11ea-b4b2-535c75a516f3 +a9dee056-fc34-11ea-a694-938c46a1e6c3 +a9defdca-fc34-11ea-b4fb-7b5d148969bb +a9df1b20-fc34-11ea-ac83-6f575cd47de7 +a9df4136-fc34-11ea-92c9-b3eb0edc5f5c +a9df627e-fc34-11ea-99ea-cf9d4b32ee3b +a9df824a-fc34-11ea-a3e2-8f9d95a48591 +a9dfa7b6-fc34-11ea-a18a-f7c50c9bec92 +a9dfcde0-fc34-11ea-8ef5-cf501dd993d9 +a9dff9d2-fc34-11ea-9c4b-539135cf591b +a9e01f2a-fc34-11ea-ba53-1348f4006018 +a9e04202-fc34-11ea-b4cf-d76773cc94d2 +a9e068a4-fc34-11ea-877a-9fac6a0728de +a9e08a6e-fc34-11ea-899f-9b9d0bd03dc0 +a9e0b156-fc34-11ea-9beb-4b9413577fa8 +a9e0d58c-fc34-11ea-b76b-1719b3a5c4df +a9e0f6e8-fc34-11ea-8602-67caba330fc2 +a9e11862-fc34-11ea-b180-33c3f5f39783 +a9e13928-fc34-11ea-87ed-1b2f65ad117b +a9e15b56-fc34-11ea-8cf1-93069f5d6cb0 +a9e18252-fc34-11ea-aa72-931ab4707b5e +a9e1b25e-fc34-11ea-aa07-8fa8d8731fc4 +a9e1d34c-fc34-11ea-90aa-43145deec41c +a9e1f19c-fc34-11ea-ad57-abca3b3a4442 +a9e21712-fc34-11ea-a0d3-a30eadd7e88d +a9e23f30-fc34-11ea-96ec-337b7cc57a0b +a9e26802-fc34-11ea-821e-83f367114d30 +a9e288fa-fc34-11ea-b517-bf62fdd69383 +a9e2ac86-fc34-11ea-a6bc-8badb7ac6197 +a9e2d404-fc34-11ea-ab98-7b088fc82d33 +a9e2f65a-fc34-11ea-9e6e-bff913d8d588 +a9e3159a-fc34-11ea-bbb4-3f4ce26e09dd +a9e33926-fc34-11ea-aaec-1b4eadb55482 +a9e358ac-fc34-11ea-92bb-6346bd78d95b +a9e37f9e-fc34-11ea-b3c5-3b696939a915 +a9e3a622-fc34-11ea-b463-5bf8b1b0638f +a9e3c6e8-fc34-11ea-a908-db5f229874cd +a9e3ed3a-fc34-11ea-95b4-d74e8a583c0e +a9e40fb8-fc34-11ea-a4dd-67c88288e9eb +a9e42fde-fc34-11ea-ad34-0385d3bcd4da +a9e44fa0-fc34-11ea-8562-5729637c8eef +a9e4707a-fc34-11ea-a7d4-17f2495aab4a +a9e49668-fc34-11ea-a8f6-b33ba862e166 +a9e4bcf6-fc34-11ea-9bd2-b740062336ae +a9e4e276-fc34-11ea-b303-83e0f2aee6fe +a9e5054e-fc34-11ea-83f0-572f907fbd46 +a9e52cc2-fc34-11ea-9cdc-ab5d9e83db36 +a9e5501c-fc34-11ea-b0c9-c7585e3b168d +a9e572c2-fc34-11ea-8b5f-afd4d373ae38 +a9e59a4a-fc34-11ea-b54f-ff713c19ec26 +a9e5bf0c-fc34-11ea-a46e-2bd754839742 +a9e5e234-fc34-11ea-832b-43a05a045d90 +a9e6021e-fc34-11ea-90c2-df3d9a822fc5 +a9e6228a-fc34-11ea-afc4-231e37ebb38a +a9e64b52-fc34-11ea-bfe3-2bf4a3b61a39 +a9e66b0a-fc34-11ea-b14f-c7a66b243d68 +a9e68a22-fc34-11ea-95c7-0b8879ae228f +a9e6a886-fc34-11ea-9e90-2b417c69ebbe +a9e6c712-fc34-11ea-b5ec-ab168c35410b +a9e6e5ee-fc34-11ea-9c0b-b37d52e9dd22 +a9e705e2-fc34-11ea-97a5-f79db51081af +a9e724aa-fc34-11ea-8fc1-d76522144069 +a9e748ae-fc34-11ea-a77e-af7afd2b616f +a9e766d6-fc34-11ea-9874-d30c04910dd6 +a9e78aa8-fc34-11ea-8a12-3337852e903a +a9e7aa06-fc34-11ea-93f7-e353c6cc0122 +a9e7cbe4-fc34-11ea-849a-b3a88be9b46c +a9e7f150-fc34-11ea-90ef-7f6c7bf65771 +a9e81176-fc34-11ea-97b4-c7162dff9a73 +a9e83020-fc34-11ea-b61e-6b8f661feccc +a9e851f4-fc34-11ea-a157-7bcc840b8040 +a9e874c2-fc34-11ea-afb9-333e2de46d4a +a9e8943e-fc34-11ea-9244-3b44e5857215 +a9e8b306-fc34-11ea-81e7-7fd1343e7e8f +a9e8d0c0-fc34-11ea-9cbb-db6298ab25e8 +a9e8f0b4-fc34-11ea-abfb-7f771dec9634 +a9e9101c-fc34-11ea-a150-238a6211b56f +a9e93182-fc34-11ea-8e9c-c3e04dde0dbf +a9e95234-fc34-11ea-b246-0bd91251ddb3 +a9e97408-fc34-11ea-8424-0bcc5365d3f5 +a9e993d4-fc34-11ea-8a53-dfad4c115d37 +a9e9b332-fc34-11ea-90f6-a70c86d504fd +a9e9d0ba-fc34-11ea-ad52-075ceba73468 +a9e9f112-fc34-11ea-8a36-7fbc998b7bf0 +a9ea14a8-fc34-11ea-abbb-2f3c5f63d731 +a9ea3b54-fc34-11ea-b7d9-777ae41b8e5b +a9ea5b8e-fc34-11ea-99ff-67f7bf5a62a9 +a9ea7f06-fc34-11ea-88eb-a764c20e4d60 +a9eaa4a4-fc34-11ea-a155-5ba4acdc481b +a9eac72c-fc34-11ea-b952-9bb7c984d3cd +a9eae824-fc34-11ea-8662-7b827881654d +a9eb08b8-fc34-11ea-a822-1f0ffb6d7d10 +a9eb2992-fc34-11ea-a995-83818aaa1439 +a9eb490e-fc34-11ea-8cb2-83816d724055 +a9eb674a-fc34-11ea-a61d-f7fbf5bcb9b4 +a9eb878e-fc34-11ea-9052-7b3cebd17d9c +a9eba53e-fc34-11ea-add3-0bec580fac63 +a9ebc5f0-fc34-11ea-8911-17cf69e14e4f +a9ebe63e-fc34-11ea-ab9b-cb38978b2949 +a9ec0808-fc34-11ea-8610-dfacdb9bf429 +a9ec281a-fc34-11ea-89cb-2bd8ecac95f5 +a9ec4692-fc34-11ea-9a43-e356c9599d2f +a9ec6546-fc34-11ea-aa67-9bec66812ef3 +a9ec8382-fc34-11ea-b74a-57ffd8680e17 +a9ecbff0-fc34-11ea-be35-0b1b2e06bc4e +a9ece0a2-fc34-11ea-8b92-cfb7241c69e1 +a9ed008c-fc34-11ea-b4a1-27da82278a99 +a9ed2210-fc34-11ea-94fb-93cbf841828b +a9ed431c-fc34-11ea-8265-83e3dd952f5e +a9ed625c-fc34-11ea-b57e-eb06fb93f4bd +a9ed7f4e-fc34-11ea-b479-5b814b8995cc +a9ed9dee-fc34-11ea-90d3-4fe5f9cf33ad +a9edbe28-fc34-11ea-a5fc-3f985958f9fc +a9eddda4-fc34-11ea-8fcc-277ad17add7f +a9edfb7c-fc34-11ea-a49c-93d4e74bba77 +a9ee1c88-fc34-11ea-b298-17f831ceb773 +a9ee3f7e-fc34-11ea-8be2-236e076bdf65 +a9ee5de2-fc34-11ea-a2d9-978ae380e6f5 +a9ee7f98-fc34-11ea-804b-0798bdbbb903 +a9eea2a2-fc34-11ea-96c0-376583cd9f5a +a9eec264-fc34-11ea-831c-0fb20de70fa6 +a9eee460-fc34-11ea-807f-6f42eda5c83a +a9ef0a80-fc34-11ea-997c-4b6ae4c26351 +a9ef2c4a-fc34-11ea-997c-afe586f04ddd +a9ef4c02-fc34-11ea-b9e2-0b8be4857b2a +a9ef7254-fc34-11ea-b38f-cba81d1458fb +a9ef95b8-fc34-11ea-98b4-d7f3446a0adf +a9efb980-fc34-11ea-bb3b-fba5c98da470 +a9efd8c0-fc34-11ea-85e7-3baa3be80280 +a9eff878-fc34-11ea-b90f-4f9f0b853698 +a9f0177c-fc34-11ea-b459-23962f60da34 +a9f03446-fc34-11ea-b3ed-fb133ea9fdb2 +a9f055a2-fc34-11ea-9064-af315a828f19 +a9f075fa-fc34-11ea-9b1b-4bac408ff7ad +a9f0967a-fc34-11ea-8c10-bba318fc1dbd +a9f0b4d4-fc34-11ea-b5d8-d7978ae7e185 +a9f0d4b4-fc34-11ea-a778-1fc5d7f9ac7b +a9f0f3ea-fc34-11ea-8e95-87fc8d21b6dd +a9f11302-fc34-11ea-8f6e-4b43b0d1b0ca +a9f13184-fc34-11ea-b702-2f3d0841aae3 +a9f14f66-fc34-11ea-9c0a-7b658a3ca1e1 +a9f17112-fc34-11ea-9eb8-43b71cd707b5 +a9f19214-fc34-11ea-9db1-2b62d495a3e0 +a9f1b37a-fc34-11ea-9171-ebaa7c14c361 +a9f1d558-fc34-11ea-ba97-670f9c7a39a3 +a9f1fb96-fc34-11ea-84f4-bfe6a2b495dc +a9f21f22-fc34-11ea-986e-8f79cf46ca85 +a9f24128-fc34-11ea-bd55-4b53aea99799 +a9f2636a-fc34-11ea-9fbc-1f022eeb2eef +a9f2843a-fc34-11ea-915b-ab268ff51a41 +a9f2a33e-fc34-11ea-8b6a-87fb8bc3d4af +a9f2c36e-fc34-11ea-a059-ff5bb26f6171 +a9f2e2e0-fc34-11ea-989c-3b27c8651d3b +a9f30356-fc34-11ea-8a9b-e747fa6a33a0 +a9f32d22-fc34-11ea-90df-6786806027ff +a9f34bae-fc34-11ea-9c62-679273dfcdf6 +a9f36ba2-fc34-11ea-8276-47f95f400bd8 +a9f38d8a-fc34-11ea-bf47-27eafdc73ed3 +a9f3ad42-fc34-11ea-862a-3f7192ffe321 +a9f3d254-fc34-11ea-bde9-f7a6ddee7434 +a9f3ff90-fc34-11ea-94cc-bb6d0c305750 +a9f426dc-fc34-11ea-9ae4-13526253d4d7 +a9f488d4-fc34-11ea-b01e-07a16d15d14d +a9f4c65a-fc34-11ea-9b67-ffa24ece3b0f +a9f4ec7a-fc34-11ea-8e30-330c57e602f7 +a9f50c82-fc34-11ea-9a0e-0324d1400efe +a9f52b90-fc34-11ea-9b22-77f33119e413 +a9f549fe-fc34-11ea-a0a7-47a7bd2143fc +a9f56b8c-fc34-11ea-8f5b-a379806168cc +a9f58c48-fc34-11ea-804c-f71a1fc902d9 +a9f5ae9e-fc34-11ea-b8a3-d32f34612110 +a9f5cf8c-fc34-11ea-8015-376068aea094 +a9f5ef58-fc34-11ea-a1e8-efd6bdb70245 +a9f60ea2-fc34-11ea-abbb-df1148da85bf +a9f62fea-fc34-11ea-a522-db28d69995f3 +a9f64f7a-fc34-11ea-8e1b-337e6908e5e0 +a9f67158-fc34-11ea-9af6-5b1f44ce20d4 +a9f6976e-fc34-11ea-a010-fbb04b9b425f +a9f6b7c6-fc34-11ea-991a-1f912a5b96d1 +a9f6d97c-fc34-11ea-aa55-cbf68e03f66e +a9f6fc18-fc34-11ea-a4ed-97924e1d70ad +a9f71dc4-fc34-11ea-847b-9b3c1cf9b3b6 +a9f7409c-fc34-11ea-b5cb-dfca19a6b85f +a9f76388-fc34-11ea-99e7-5f2cf78d18be +a9f78458-fc34-11ea-ae43-a75a780a31cc +a9f7a4e2-fc34-11ea-8523-5f687116a8dc +a9f7c45e-fc34-11ea-b95d-db9e396f191f +a9f7e3bc-fc34-11ea-ba40-0bfd4bcc99a9 +a9f80590-fc34-11ea-88aa-5fc0fa0022ef +a9f82688-fc34-11ea-bd79-b318a445aa96 +a9f844a6-fc34-11ea-bb17-2bd754647df1 +a9f86404-fc34-11ea-9d41-bf6d68f06620 +a9f883c6-fc34-11ea-941b-73a5792ad79f +a9f8a554-fc34-11ea-8a22-c3c5a71b2eba +a9f8c3d6-fc34-11ea-8a1b-5b5283974e60 +a9f8e2a8-fc34-11ea-a664-67432d63b58e +a9f90300-fc34-11ea-9ae6-1f4963cfa83b +a9f92286-fc34-11ea-a88e-73d5f3243676 +a9f94608-fc34-11ea-994a-4b060e30e111 +a9f967dc-fc34-11ea-81cc-63849926997b +a9f98870-fc34-11ea-a5ee-e7d37bfc3950 +a9f9aabc-fc34-11ea-90c1-13dcc05e55d2 +a9f9ca38-fc34-11ea-b66f-03569dc6a1a6 +a9f9ed88-fc34-11ea-ac33-1bb362f68026 +a9fa0f0c-fc34-11ea-a5b5-17a4ae6b731c +a9fa2d2a-fc34-11ea-b6d7-f7bfd4ff0061 +a9fa4bac-fc34-11ea-b5b8-efbd03074774 +a9fa6ccc-fc34-11ea-b9e3-e35821459af1 +a9fa8cfc-fc34-11ea-af2e-e7d25325ab82 +a9faad36-fc34-11ea-b27d-e3349bab319f +a9faccda-fc34-11ea-be72-0f4f163a61da +a9faec38-fc34-11ea-a7b5-53d6a0f7c834 +a9fb0c18-fc34-11ea-88d8-4fc2dee0b2ce +a9fb2b30-fc34-11ea-a594-5b4a1fcacf41 +a9fb4a02-fc34-11ea-8a1f-1bc893b85ecc +a9fb69ce-fc34-11ea-9768-a772fded442b +a9fb8918-fc34-11ea-bf15-8754896d9912 +a9fba7fe-fc34-11ea-8473-37b20794ad3d +a9fbc5fe-fc34-11ea-a809-97db6feec84c +a9fbe624-fc34-11ea-9f84-87c2487c3fb3 +a9fc04a6-fc34-11ea-8a9d-5b6196b94a07 +a9fc2be8-fc34-11ea-ad7e-174e806fb387 +a9fc501e-fc34-11ea-aefa-c7ce02c0b946 +a9fc70a8-fc34-11ea-b05d-b3d69cabb76f +a9fc924a-fc34-11ea-a421-bf9281d1706e +a9fcb1c6-fc34-11ea-9ce8-2345ae734b5e +a9fcd2f0-fc34-11ea-94b3-672578571798 +a9fcf3a2-fc34-11ea-a353-638515529755 +a9fd144a-fc34-11ea-80f0-73768aff7e32 +a9fd3452-fc34-11ea-af6a-9bf0f5f36281 +a9fd54b4-fc34-11ea-85d1-e7e846af26f3 +a9fd7368-fc34-11ea-97be-5b44ae67cce7 +a9fd9316-fc34-11ea-8f56-fbecc2da5d26 +a9fdb256-fc34-11ea-9c16-c7f4661c9e8c +a9fdd114-fc34-11ea-9919-cf92f585b9a6 +a9fdee74-fc34-11ea-8db7-2f52cb64519c +a9fe132c-fc34-11ea-8e65-4b40d93747ed +a9fe3596-fc34-11ea-a955-03e22546fc76 +a9fe58c8-fc34-11ea-8c46-3f44ab466b8f +a9fe7844-fc34-11ea-a7d2-2b2d95f2856b +a9fe9ae0-fc34-11ea-84a0-afd7fe624a27 +a9febd18-fc34-11ea-872a-a7116597456c +a9fee36a-fc34-11ea-a444-6f3f3953514c +a9ff03a4-fc34-11ea-98a0-df9199ba15e0 +a9ff2226-fc34-11ea-9184-d753cbda47e2 +a9ff4350-fc34-11ea-80e1-c3bf4e477433 +a9ff633a-fc34-11ea-bf5e-03749d6a2922 +a9ff8284-fc34-11ea-85a6-936c01e59def +a9ffa2dc-fc34-11ea-ac6b-9ba9a044f91a +a9ffc280-fc34-11ea-8ac1-33e0960d003c +a9ffe26a-fc34-11ea-a71a-9bdebd110ca1 +aa000218-fc34-11ea-9cac-77ce6a3c5919 +aa001f82-fc34-11ea-a6ff-47464c213eb3 +aa0041a6-fc34-11ea-9b67-9f29454b6995 +aa00632a-fc34-11ea-b767-df92e892ebc5 +aa008210-fc34-11ea-89ea-2be023ae0bf3 +aa00a556-fc34-11ea-bab3-b78ccd6921cf +aa00c630-fc34-11ea-9a81-cbea6fb6837e +aa00e87c-fc34-11ea-b93c-378747265eea +aa0108a2-fc34-11ea-a903-87c2e9e5eae5 +aa012c42-fc34-11ea-b585-674ff65a9ed4 +aa014bbe-fc34-11ea-92dd-a7e253505860 +aa016e00-fc34-11ea-97de-9bfd8a9985e9 +aa018e1c-fc34-11ea-a173-ab1003d31ec7 +aa01ad8e-fc34-11ea-b02d-5b2b4d9cd77e +aa01cdd2-fc34-11ea-b6e5-ff4ee63bac4b +aa01ee5c-fc34-11ea-90a4-2ba2c3dfb989 +aa020e6e-fc34-11ea-adc7-3b81b2ef638e +aa022ca0-fc34-11ea-933c-637cb5266cb8 +aa024b72-fc34-11ea-93c2-17b05185ed0b +aa0269f4-fc34-11ea-ab4a-7f4680501f4e +aa028858-fc34-11ea-9890-0b890d163906 +aa02a73e-fc34-11ea-9c1e-5ba84657d561 +aa02c62e-fc34-11ea-becc-d785bcd1414a +aa02e456-fc34-11ea-b129-df568b861b0b +aa03036e-fc34-11ea-8138-43eb3d93e542 +aa0322a4-fc34-11ea-b587-2f02fcf2512d +aa0341b2-fc34-11ea-ae97-c354e99d1f68 +aa0362be-fc34-11ea-bd26-9783b820b758 +aa038334-fc34-11ea-9a39-b7648678d817 +aa03a558-fc34-11ea-a6b6-fb6c9b9e5c82 +aa03c498-fc34-11ea-86d1-9be4ccb2bcbf +aa03e504-fc34-11ea-a47b-6f79ad52a5e5 +aa0405e8-fc34-11ea-9068-a712d71631be +aa042ae6-fc34-11ea-accb-438e4529a5aa +aa044b2a-fc34-11ea-be30-eb0e186df636 +aa046d80-fc34-11ea-8fcf-6743c31d6803 +aa049058-fc34-11ea-8f12-478fb3f78a28 +aa04af16-fc34-11ea-9d77-fbd9dcba8bec +aa04cd8e-fc34-11ea-af6f-f7afa3ee1e39 +aa04ea62-fc34-11ea-a5a4-f715bd7bcc0e +aa0507c2-fc34-11ea-a936-9fe4108d57a8 +aa0526a8-fc34-11ea-a5b9-53cec429312f +aa05475a-fc34-11ea-9c62-b7f859b8ae70 +aa056636-fc34-11ea-aa93-fbb45ae3b406 +aa058800-fc34-11ea-9500-53d3755a8150 +aa05a61e-fc34-11ea-bba0-3faff662f0f9 +aa05c68a-fc34-11ea-8572-9f7150a2613f +aa05e746-fc34-11ea-b216-afd5210023dd +aa06092e-fc34-11ea-94d9-777b778a9323 +aa062dfa-fc34-11ea-a09c-73879e0381e6 +aa065122-fc34-11ea-bcdb-73f10b744b8e +aa067328-fc34-11ea-910d-37f435af5a0a +aa06992a-fc34-11ea-a584-43929d3327e7 +aa06b98c-fc34-11ea-80db-1b165dbbd768 +aa06da02-fc34-11ea-8c48-67f6e2f01b5c +aa06f9a6-fc34-11ea-9cb5-bb63e037550c +aa0718c8-fc34-11ea-8741-bf5fb2f05f6d +aa0739fc-fc34-11ea-9edc-27242baab72e +aa0758ba-fc34-11ea-be12-afcee92756a0 +aa077692-fc34-11ea-b69e-0f44df7751e1 +aa07978a-fc34-11ea-959c-afe42adbbcae +aa07b742-fc34-11ea-9214-3ffb51fc6042 +aa07d858-fc34-11ea-9d8a-47525b22e84c +aa07f7e8-fc34-11ea-a13a-f79e44e1aa64 +aa0817be-fc34-11ea-b183-0b17cea7fb49 +aa083820-fc34-11ea-85ad-9bd67d84ddc8 +aa0857c4-fc34-11ea-9547-8b8f655a53b2 +aa0877a4-fc34-11ea-bbb9-5b801260d2a1 +aa089dd8-fc34-11ea-8b6c-67b96e400197 +aa08bef8-fc34-11ea-b278-5b7686726973 +aa08de60-fc34-11ea-9eb9-5f72c4162c97 +aa08ffa8-fc34-11ea-9d34-5f8e8c1bbc10 +aa092528-fc34-11ea-acf5-5758c83e9c45 +aa094670-fc34-11ea-aee5-1fe99b20de7d +aa09668c-fc34-11ea-8529-8bd017ea9fca +aa098892-fc34-11ea-8028-3bf56b7cdce7 +aa09a7b4-fc34-11ea-a097-53383fd1cc4a +aa09c58c-fc34-11ea-ac2c-9f563ccc6da7 +aa09e81e-fc34-11ea-9620-1b13e5f447ab +aa0a095c-fc34-11ea-be25-7b0e24f4ffb1 +aa0a28b0-fc34-11ea-bf3b-2fdae54097d7 +aa0a47a0-fc34-11ea-9c57-f33e4490a079 +aa0a667c-fc34-11ea-bf5b-ab6fd087af5f +aa0a836e-fc34-11ea-a409-4b13044a3a05 +aa0aa2ae-fc34-11ea-841c-d3205f066bfe +aa0ac04a-fc34-11ea-9977-c39a641053bd +aa0ae0ca-fc34-11ea-a6e2-7b982087b86b +aa0b023a-fc34-11ea-8d32-67a0a8f32ff0 +aa0b28d2-fc34-11ea-bc60-4f96246dfa27 +aa0b4d80-fc34-11ea-9d80-a78838f54c0f +aa0b7350-fc34-11ea-bc48-1f452a789121 +aa0b96a0-fc34-11ea-bfc7-c76a1ebfa717 +aa0bb5f4-fc34-11ea-bebd-db71d7a3d952 +aa0bd728-fc34-11ea-a46b-37f20a0f2a43 +aa0bf5aa-fc34-11ea-9aff-435f071bd1f5 +aa0c15e4-fc34-11ea-8b1e-334b362b5db3 +aa0c354c-fc34-11ea-a960-afba0ee07cd7 +aa0c54c8-fc34-11ea-842d-db29cf25d678 +aa0c75b6-fc34-11ea-89eb-c76895d4424f +aa0c9442-fc34-11ea-bf26-b7806e118d6c +aa0cb21a-fc34-11ea-8a62-6b442e53bd50 +aa0cd1b4-fc34-11ea-94dd-0b16ba749884 +aa0cf14e-fc34-11ea-b624-cf3a546a67c2 +aa0d13ae-fc34-11ea-a9ea-e785dfbc6ab4 +aa0d32bc-fc34-11ea-bfa0-3bed35873463 +aa0d5198-fc34-11ea-a7d7-fbf833566ad0 +aa0d7420-fc34-11ea-8fe4-e788e44d65fc +aa0d9824-fc34-11ea-9f40-d71711db9aa8 +aa0dbd2c-fc34-11ea-92d5-1f11953f6ce9 +aa0ddd0c-fc34-11ea-a326-b36f2540671e +aa0dfc2e-fc34-11ea-ba80-a3f22330cdaf +aa0e1f4c-fc34-11ea-9207-bf50f81f4a37 +aa0e3e96-fc34-11ea-84d6-9bb008c1fa07 +aa0e5fd4-fc34-11ea-b8cc-670436a5b918 +aa0e811c-fc34-11ea-90a8-231b7b5e6618 +aa0ea0fc-fc34-11ea-abea-377296f0254b +aa0ec104-fc34-11ea-a020-03fbc6cd586b +aa0edfc2-fc34-11ea-a885-abd79e02fd93 +aa0f0100-fc34-11ea-b75b-dfba62915e1f +aa0f2126-fc34-11ea-a004-87408cc41898 +aa0f421e-fc34-11ea-9fdf-bff927815f19 +aa0f63ac-fc34-11ea-a62b-4b857c565154 +aa0f84ae-fc34-11ea-8973-5b71cc214cbf +aa0fa506-fc34-11ea-a8c3-5f7a437f91db +aa0fc392-fc34-11ea-acbd-6bc20cef86fd +aa0fe14c-fc34-11ea-91a0-5b546635bae3 +aa1005be-fc34-11ea-8d86-b3e9ca37d96a +aa102bfc-fc34-11ea-a423-ebe0d5e85691 +aa104eac-fc34-11ea-8ec3-8b5929a9ecb4 +aa107148-fc34-11ea-8e73-6f849f535436 +aa1093c6-fc34-11ea-bc7e-0b0919d0d7b2 +aa10b4be-fc34-11ea-9f1d-7700f895047b +aa10d5b6-fc34-11ea-a7d8-875b5991b77a +aa10f44c-fc34-11ea-9bd3-8b8c8644b490 +aa11138c-fc34-11ea-ab21-d7aa1d94c59a +aa11356a-fc34-11ea-8a86-4f34b92c7cc6 +aa1154e6-fc34-11ea-a6f8-fb5c52c931d8 +aa117476-fc34-11ea-8518-6faa805bd6ca +aa119424-fc34-11ea-9210-5bcc5b189376 +aa11b486-fc34-11ea-9b64-53ccdb852cfa +aa11d380-fc34-11ea-9a9b-a3bd507b938d +aa11f482-fc34-11ea-9e1c-ab28371351c3 +aa12137c-fc34-11ea-ba09-b363c711cee7 +aa123230-fc34-11ea-8198-bf4c2e44fb94 +aa125288-fc34-11ea-9768-53d6a9d014c7 +aa127164-fc34-11ea-bf2e-abd58f4f531b +aa129130-fc34-11ea-bcbc-27d28e6888e0 +aa12af94-fc34-11ea-9ba6-3fa44eae98d8 +aa12d532-fc34-11ea-b587-fb62d28c986e +aa12f8be-fc34-11ea-aed2-e7ded77987b4 +aa1318bc-fc34-11ea-8fa7-57669da3e589 +aa1337e8-fc34-11ea-9e69-abeee3c33ab0 +aa1357fa-fc34-11ea-b83d-9738578f658b +aa137794-fc34-11ea-84e5-bfdc477d994e +aa1396a2-fc34-11ea-8c10-f38b4f7cbd09 +aa13b7c2-fc34-11ea-a2a3-338588c7a080 +aa13d720-fc34-11ea-95d5-abf99465e7cf +aa13f6ba-fc34-11ea-a400-bf0c42a9d182 +aa141744-fc34-11ea-b904-7b69197401a9 +aa1434ea-fc34-11ea-ac72-675b04942245 +aa1453da-fc34-11ea-897f-f752f8b62900 +aa147360-fc34-11ea-8319-d34a7fb57d9a +aa1493a4-fc34-11ea-a8bb-8396e2319181 +aa14b4ba-fc34-11ea-96ae-abd257845714 +aa14d224-fc34-11ea-8baf-9767e0c37b6c +aa14f434-fc34-11ea-9ace-9f1a1149c818 +aa151270-fc34-11ea-9d2c-37c67ff68a6e +aa15332c-fc34-11ea-a588-1f0817e612c8 +aa15585c-fc34-11ea-8898-ffa80c9bf58e +aa157c4c-fc34-11ea-9da4-e319e1076ffb +aa159d76-fc34-11ea-bd61-5b3df840af09 +aa15bdd8-fc34-11ea-8b6d-cb8930baa525 +aa15de08-fc34-11ea-99c6-07c15e84791a +aa15fe92-fc34-11ea-83a5-7385222d8cf9 +aa161fda-fc34-11ea-bf7e-67b479f54522 +aa163e0c-fc34-11ea-8f15-83a1a2ef8268 +aa165bd0-fc34-11ea-9008-cbf1cb69674b +aa167bce-fc34-11ea-aada-df5a8964ee16 +aa169dde-fc34-11ea-9099-933618741291 +aa16bc06-fc34-11ea-a9db-43c83c4936e8 +aa16dc72-fc34-11ea-b69d-079a03849e7d +aa16fb30-fc34-11ea-834b-1b0b8c2a546a +aa171a84-fc34-11ea-a87d-976eb1db4f69 +aa173ac8-fc34-11ea-8f04-9b03f3d4c1d0 +aa175d96-fc34-11ea-a2da-7f89f4be2783 +aa177e70-fc34-11ea-9e80-cf1b8c024b3b +aa17a062-fc34-11ea-ae86-9b6eb4e99acc +aa17bf84-fc34-11ea-a327-87d9ca0d135f +aa17dfbe-fc34-11ea-9a11-638550eed9bb +aa1804da-fc34-11ea-ae33-73b650d717d8 +aa1827b2-fc34-11ea-b28d-dfaa7eac6039 +aa184e5e-fc34-11ea-a952-67c52d6bc1ab +aa18705a-fc34-11ea-af94-2725f819a626 +aa188fb8-fc34-11ea-ab61-4be23e61567d +aa18ae6c-fc34-11ea-abd5-ebb5a5629456 +aa18cffa-fc34-11ea-be1c-536276265de6 +aa18ee86-fc34-11ea-979f-bfdb57010f09 +aa190f06-fc34-11ea-9a27-f7214846391c +aa192e5a-fc34-11ea-8dc5-936eb9683456 +aa194e30-fc34-11ea-bbd9-7362d8390ff3 +aa196db6-fc34-11ea-9faa-8334f727fe0d +aa198f4e-fc34-11ea-9934-9360b1abd687 +aa19b078-fc34-11ea-919a-d7a539a9d16b +aa19cd42-fc34-11ea-bd9b-ef3989205af4 +aa19ed4a-fc34-11ea-a6a6-c39b295c1e29 +aa1a0d52-fc34-11ea-8744-c7bbf9304454 +aa1a2e9a-fc34-11ea-92d8-4bec6ca59da4 +aa1a4e66-fc34-11ea-aebb-9363c4ffa6e1 +aa1a6fc2-fc34-11ea-bf81-4ffc24edf088 +aa1a90e2-fc34-11ea-b52e-a7e6fbca71e4 +aa1ab144-fc34-11ea-b6ee-db152a5a0eaa +aa1ad02a-fc34-11ea-90a7-f788b4f51c4e +aa1af30c-fc34-11ea-84bd-5f1a057881e8 +aa1b1a44-fc34-11ea-b2cf-33c6c3a76a48 +aa1b39b6-fc34-11ea-a7e0-1790ca5f9a3f +aa1b59e6-fc34-11ea-a0d1-070d3546e492 +aa1b79a8-fc34-11ea-b8b4-0fd8ffaba6f9 +aa1b9802-fc34-11ea-9195-c3a42a1e6da0 +aa1bb90e-fc34-11ea-8521-2fae34762da0 +aa1bd862-fc34-11ea-92c4-777e21aeeef6 +aa1bf91e-fc34-11ea-b4cd-0b2f4686d389 +aa1c18d6-fc34-11ea-8fc7-1f34971cac93 +aa1c3776-fc34-11ea-8d23-53e7b1aba7c0 +aa1c5882-fc34-11ea-aa17-c76a8a363616 +aa1c77f4-fc34-11ea-b08a-c704cbaeeab8 +aa1c9892-fc34-11ea-a8b6-23b85b99a3ba +aa1cb9ee-fc34-11ea-8a65-238ed69d0fd3 +aa1cdbfe-fc34-11ea-9c4a-b7e38bbaade9 +aa1cfe90-fc34-11ea-bce8-435db63d1728 +aa1d1f56-fc34-11ea-ac36-83d3e927a4e2 +aa1d40b2-fc34-11ea-8f41-db549798d096 +aa1d6628-fc34-11ea-a3c2-43c160c62e89 +aa1d8a18-fc34-11ea-9035-7b579188f729 +aa1daab6-fc34-11ea-be6a-db2e78a4bfe1 +aa1dc992-fc34-11ea-a3f0-33bae64022b2 +aa1de706-fc34-11ea-9e24-8b096d61bbdb +aa1e0786-fc34-11ea-9a4d-4ffc9eb13059 +aa1e29a0-fc34-11ea-8124-43a4b3e671ed +aa1e48e0-fc34-11ea-aba1-2bf64cbaf4ac +aa1e6a96-fc34-11ea-8dfa-9f6326675861 +aa1e8aa8-fc34-11ea-b155-8b29a9f52075 +aa1eaaf6-fc34-11ea-8804-b7ca4e12d10d +aa1ecaea-fc34-11ea-8932-8b98fab7c9cb +aa1eeb10-fc34-11ea-80de-67e4f5bcb53c +aa1f0c80-fc34-11ea-8ad9-47ec2e5f89b7 +aa1f2a8a-fc34-11ea-a851-3fff933bcebb +aa1f4ca4-fc34-11ea-8311-5f80be79243d +aa1f6c34-fc34-11ea-bd9d-37d67f15f5fe +aa1f8c64-fc34-11ea-afb2-e7eff020311f +aa1fae4c-fc34-11ea-9aed-ef0eb0ddcf19 +aa1fd502-fc34-11ea-a795-b3b3805fdf77 +aa1ff960-fc34-11ea-a7a1-2306a22c08ba +aa201b98-fc34-11ea-8c00-d7c757697b70 +aa203ae2-fc34-11ea-ad45-1fed6d9f76c7 +aa205b80-fc34-11ea-8ee8-3394fa73a179 +aa207d7c-fc34-11ea-af95-131830921b42 +aa209ec4-fc34-11ea-8ce2-63775ccef3f9 +aa20be2c-fc34-11ea-9b7b-ebc2827cc635 +aa20df06-fc34-11ea-8cc7-cfa113ea6e25 +aa2100d0-fc34-11ea-a8ab-e3cb1a3b644e +aa211ed0-fc34-11ea-82c5-3b949dab1df0 +aa213dde-fc34-11ea-a68b-333d9a92997d +aa215dc8-fc34-11ea-9e28-f7c0d15ff523 +aa217ccc-fc34-11ea-9647-ff65f0be9cea +aa219c70-fc34-11ea-a068-03492af5b4c2 +aa21bdfe-fc34-11ea-a860-4317535590c2 +aa21dd8e-fc34-11ea-aa2f-775aa60d9830 +aa21fe18-fc34-11ea-baf4-c7a9f952fa67 +aa221ede-fc34-11ea-9d8f-67909dcd9c62 +aa223eaa-fc34-11ea-84ed-33bbf9c575f5 +ab82a21c-fc34-11ea-a00b-db1a18e277e6 +ac00c3ae-fc34-11ea-8627-e3f64444c02d +ac00e67c-fc34-11ea-95da-177db4b24217 +ac01080a-fc34-11ea-a318-1b0e3a9959e8 + + diff --git a/bubble-server/src/test/resources/charset_detection/meta-windows-1250-late.html b/bubble-server/src/test/resources/charset_detection/meta-windows-1250-late.html new file mode 100644 index 00000000..7abb3a98 --- /dev/null +++ b/bubble-server/src/test/resources/charset_detection/meta-windows-1250-late.html @@ -0,0 +1,2569 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Example.local using Windows-1250 text encoding + + + a8e04adc-fc34-11ea-871e-cf879e8aa41d + a8e07e80-fc34-11ea-937b-7fe01851f53c + a8e0ae00-fc34-11ea-9862-bb138458428d + a8e0e028-fc34-11ea-bf81-2fd0e36323b3 + a8e10ec2-fc34-11ea-8bb3-5babf224dfec + a8e13bb8-fc34-11ea-a6a9-2f952ac24f48 + a8e16d68-fc34-11ea-9a43-03abb9c3a161 + a8e19c8e-fc34-11ea-a7de-43467c6facfe + a8e1cd80-fc34-11ea-9a14-bf5363ecbbb6 + a8e20138-fc34-11ea-b4d1-bf7643261884 + a8e2343c-fc34-11ea-83b9-a372f40effc3 + a8e274e2-fc34-11ea-9a1d-bb0047af455d + a8e2acb4-fc34-11ea-9c58-8b2d90b21f52 + a8e2ebc0-fc34-11ea-8565-dfee75e17960 + a8e31f3c-fc34-11ea-bde1-13677bfb5926 + a8e3525e-fc34-11ea-988c-ffe4ae297a3c + a8e387ba-fc34-11ea-a1ae-03f43e79569b + a8e3bef6-fc34-11ea-a079-e78a11603b05 + a8e3eec6-fc34-11ea-a3fd-c763a8313b0e + a8e41e82-fc34-11ea-9e68-2f0fc7bf6c8c + a8e450e6-fc34-11ea-a15d-ef5194a356a2 + a8e489a8-fc34-11ea-b121-6f829f9daa25 + a8e4ba40-fc34-11ea-8c29-eb4aec42fe7a + a8e4e7d6-fc34-11ea-afeb-2f9b49e9dd2d + a8e514ea-fc34-11ea-8460-db20fd444f94 + a8e558e2-fc34-11ea-8fc1-075d38d4efb3 + a8e593b6-fc34-11ea-b2ba-8740223fd8f8 + a8e5dd1c-fc34-11ea-90ba-fb5748d7eac0 + a8e64a7c-fc34-11ea-bdb9-6b7e8069143f + a8e68cc6-fc34-11ea-976b-27f4ca521c4c + a8e6be80-fc34-11ea-b655-87bed243253e + a8e6ece8-fc34-11ea-80b5-e36353450fb7 + a8e718a8-fc34-11ea-bab9-1b45f6beadbf + a8e74bac-fc34-11ea-a8c2-1b9fe976f51e + a8e780b8-fc34-11ea-bfc4-1b6abd9f3ec8 + a8e7ab56-fc34-11ea-8559-87c2b0598b1a + a8e7d9dc-fc34-11ea-a97c-3f1db496c34f + a8e8133e-fc34-11ea-bd29-c75ff04cdbba + a8e83742-fc34-11ea-8355-1f233c72876e + a8e85934-fc34-11ea-b7dc-4fd67d4f92b7 + a8e87824-fc34-11ea-bb3f-5f3c86590b94 + a8e89638-fc34-11ea-87d1-7f39e18e8d48 + a8e8b4c4-fc34-11ea-b299-931361dba8ee + a8e8d1ac-fc34-11ea-aeaf-17b78f4d0923 + a8e8f3ee-fc34-11ea-b90a-cf1720d23172 + a8e91806-fc34-11ea-b645-ef78fbdff129 + a8e93764-fc34-11ea-b0b8-33fc9bbf9596 + a8e95e7e-fc34-11ea-83d8-4f6cc7c7d0aa + a8e97f1c-fc34-11ea-9349-03907479172a + a8e9a26c-fc34-11ea-b720-d7d0d24cb2c0 + a8e9cd96-fc34-11ea-acc2-4777381c0eb4 + a8e9ee52-fc34-11ea-b5ea-77ad38731fc3 + a8ea1166-fc34-11ea-af35-a3c1813404cb + a8ea3056-fc34-11ea-8686-dfa1657d182c + a8ea5162-fc34-11ea-9964-f7e6d2d619d5 + a8ea7f0c-fc34-11ea-a804-4f4500b35de6 + a8eab3be-fc34-11ea-a5f7-3fffef05b852 + a8eae7d0-fc34-11ea-a4aa-d3f64f9ea285 + a8eb1476-fc34-11ea-9df4-033a02abcaf9 + a8eb337a-fc34-11ea-9a41-03d06667c4c7 + a8eb50da-fc34-11ea-bfc2-87feaba3d87b + a8eb70c4-fc34-11ea-a88e-47e0d6b95432 + a8eb9676-fc34-11ea-b539-6fe90bb2192c + a8ebbc1e-fc34-11ea-823d-5b5a35e6ae46 + a8ebe126-fc34-11ea-81ba-e359a254de92 + a8ec0408-fc34-11ea-92be-2b0a36ceb5b2 + a8ec2618-fc34-11ea-885d-8b0a885bd5af + a8ec494a-fc34-11ea-841f-af23e5312e03 + a8ec6772-fc34-11ea-bc7a-cfe098c519f2 + a8ec86da-fc34-11ea-8819-6b3b4a6f068f + a8eca444-fc34-11ea-a69a-cf31c97644c9 + a8ecc1f4-fc34-11ea-b122-9fb9d7995848 + a8ecdfae-fc34-11ea-9b4c-3315b4d83847 + a8ecfe62-fc34-11ea-b095-4fc5c01fe695 + a8ed1b40-fc34-11ea-a4ac-af8478e98cfc + a8ed381e-fc34-11ea-aebf-4fed988d5da5 + a8ed54f2-fc34-11ea-a6eb-f3398cfb3df3 + a8ed71b2-fc34-11ea-bafe-e7ac34d8bcc3 + a8ed923c-fc34-11ea-aafd-d790b4ec1461 + a8edb082-fc34-11ea-8cab-bb3b61f4aef3 + a8edcdba-fc34-11ea-8733-ab533a82bde8 + a8edf150-fc34-11ea-a09d-573e44acd5c6 + a8ee14a0-fc34-11ea-8e07-773653ea9f15 + a8ee35de-fc34-11ea-82e5-4ffdc6523c27 + a8ee5a0a-fc34-11ea-9a77-6772bfbc1db7 + a8ee7936-fc34-11ea-b1e2-3f85d01c5723 + a8ee9c72-fc34-11ea-8067-d7f4b29acaef + a8eebfe0-fc34-11ea-92ac-a3bfe0646661 + a8eedfb6-fc34-11ea-9f6d-e7342f75d0a8 + a8eefce4-fc34-11ea-a6ab-6b78097ca2ed + a8ef1cb0-fc34-11ea-ae8c-7bc991fbe9a8 + a8ef3b3c-fc34-11ea-9522-c788c152b482 + a8ef5900-fc34-11ea-ac97-57ca3c08dfe7 + a8ef7692-fc34-11ea-9055-4f070d1c2fb3 + a8ef951e-fc34-11ea-9e88-afb7a9538c5d + a8efb36e-fc34-11ea-9dfb-bb2e316afea2 + a8efcf52-fc34-11ea-82dd-efba2aa0a291 + a8efed3e-fc34-11ea-8268-4f8b24b2c17a + a8f00b16-fc34-11ea-a0e5-83964f954810 + a8f026aa-fc34-11ea-8ba3-6b3b24505944 + a8f04310-fc34-11ea-b561-7777fe7dec9b + a8f05f12-fc34-11ea-b175-538185bfcb85 + a8f07aa6-fc34-11ea-8f4b-3f84ec120699 + a8f09a7c-fc34-11ea-aaa8-5bc1c3757147 + a8f0bcb4-fc34-11ea-9ca2-33bd58e17b61 + a8f0df64-fc34-11ea-9c1e-9f8a81aa56f1 + a8f0ff44-fc34-11ea-a0b5-773a5ad4acc8 + a8f11e98-fc34-11ea-9811-df39d88566a5 + a8f13d92-fc34-11ea-ab9b-d3e821003a00 + a8f15b7e-fc34-11ea-93c1-d36257e2a893 + a8f179e2-fc34-11ea-a9b5-afe32ecb804e + a8f198c8-fc34-11ea-90ac-874e37ab50b3 + a8f1b98e-fc34-11ea-bafc-47298e3c4ef5 + a8f1db4e-fc34-11ea-ae75-7fb6e94ea8e3 + a8f1f962-fc34-11ea-8043-bf01d2557a5f + a8f21992-fc34-11ea-b680-af271c33b109 + a8f2376a-fc34-11ea-b412-f7ac5e971c82 + a8f258e4-fc34-11ea-9695-0f2b23673772 + a8f2796e-fc34-11ea-a92b-ebcb77d570f9 + a8f2993a-fc34-11ea-9a9f-3bf731340eee + a8f2b6a4-fc34-11ea-a0e2-7b85d1a628a0 + a8f2d616-fc34-11ea-8c0d-bb10ac341225 + a8f2f3c6-fc34-11ea-ba2c-47af5e86c02e + a8f31220-fc34-11ea-a857-8b3ae4e18c62 + a8f331d8-fc34-11ea-beaf-e7a196691f96 + a8f35064-fc34-11ea-8224-7f75cd6f5335 + a8f36ee6-fc34-11ea-be69-2b08a684fcfa + a8f38f66-fc34-11ea-b135-0b673fddc3d3 + a8f3af3c-fc34-11ea-a517-3b1f6ba9e4d5 + a8f3ce4a-fc34-11ea-8827-7f575606d4bc + a8f3f528-fc34-11ea-baa3-3371270b266b + a8f4156c-fc34-11ea-8ff2-973aebc5e7f9 + a8f43178-fc34-11ea-90dd-1b69353bdf4a + a8f45392-fc34-11ea-b9da-9fba59b5f205 + a8f47160-fc34-11ea-b1f3-f7beabb9eaba + a8f48fc4-fc34-11ea-b06b-2f7eebe66d99 + a8f4ad1a-fc34-11ea-adbb-3fc42cd68689 + a8f4cb24-fc34-11ea-9f38-5b3e1022d02e + a8f4e96a-fc34-11ea-8b3a-3764ab340dde + a8f50896-fc34-11ea-9c56-1b33f7d3ad5d + a8f5268c-fc34-11ea-8e40-e3f0139704bd + a8f54496-fc34-11ea-bf6b-47ee3c476689 + a8f562f0-fc34-11ea-9b10-9382b5e0d54c + a8f580e6-fc34-11ea-bd47-a7e6a79c62b9 + a8f59bbc-fc34-11ea-9662-6feeb0498484 + a8f5ba34-fc34-11ea-81db-871a0945f917 + a8f5d8b6-fc34-11ea-a79e-8fce9911cb46 + a8f5f936-fc34-11ea-b57b-c31a9537d7f8 + a8f61e2a-fc34-11ea-a9bf-97d8967d6176 + a8f63f72-fc34-11ea-a80c-03f19ed96196 + a8f65dfe-fc34-11ea-85bf-2fefca57504e + a8f67d02-fc34-11ea-a033-f73e73c79983 + a8f69abc-fc34-11ea-b85a-63a06c4c7441 + a8f6b8d0-fc34-11ea-8048-fb0beb6788af + a8f6d78e-fc34-11ea-a45d-db09a730fab3 + a8f6f4a8-fc34-11ea-9344-57d69b3cebce + a8f71316-fc34-11ea-8dd9-7bff549b2e5b + a8f73346-fc34-11ea-9dae-07ba3c9f32eb + a8f75326-fc34-11ea-be60-c3d1e15dc426 + a8f770fe-fc34-11ea-bdfe-f7af652cca57 + a8f78ec2-fc34-11ea-bb9f-3762899e6bf3 + a8f7add0-fc34-11ea-b303-df07fc847946 + a8f7cf18-fc34-11ea-bbfa-2f8b144916bf + a8f7ee08-fc34-11ea-a74f-6754b7031145 + a8f80cd0-fc34-11ea-a485-33a96c7ac559 + a8f82e2c-fc34-11ea-a060-fb60f054364a + a8f84b82-fc34-11ea-a5d4-0f453475e465 + a8f86a9a-fc34-11ea-81bd-7fa584fab0f0 + a8f88cf0-fc34-11ea-9ad0-ef3ec11a8cf0 + a8f8abe0-fc34-11ea-891c-3391ecc4c163 + a8f8cada-fc34-11ea-8e63-ebea91a10c1c + a8f8eab0-fc34-11ea-94b0-2f18cb5f7c3a + a8f908d8-fc34-11ea-97ab-5ba8c17da4c3 + a8f92b60-fc34-11ea-a42f-c3dfe95c84b7 + a8f94a00-fc34-11ea-95b6-a7703082b861 + a8f96896-fc34-11ea-b0ec-f35a46eac0a7 + a8f986c8-fc34-11ea-b704-fb4aa31d9232 + a8f9a4dc-fc34-11ea-b629-e348d62ad485 + a8f9c458-fc34-11ea-b838-471d5304cac6 + a8f9e384-fc34-11ea-88aa-a73d64f4ff94 + a8fa013e-fc34-11ea-a49b-1b2d0cfca1d4 + a8fa209c-fc34-11ea-b5fe-b799f9ae695c + a8fa3d20-fc34-11ea-95e3-e31740a35040 + a8fa5918-fc34-11ea-86a3-a7bc1857bacd + a8fa76fa-fc34-11ea-8266-074097440a20 + a8fa95d6-fc34-11ea-aae6-a342563f4b43 + a8fab91c-fc34-11ea-8119-63afe4adba87 + a8fad9d8-fc34-11ea-adc6-df37918a4242 + a8fafba2-fc34-11ea-899e-4fd1c008f938 + a8fb1ee8-fc34-11ea-9e4d-2fe05be1b250 + a8fb3ec8-fc34-11ea-b5a4-2b1c1d62d392 + a8fb5cdc-fc34-11ea-a888-431cce0ae1b0 + a8fb8176-fc34-11ea-ae08-b3569a73a60e + a8fba0de-fc34-11ea-8d6b-f79697c530fc + a8fbc118-fc34-11ea-b21a-5b30c4352bdb + a8fbe166-fc34-11ea-9a10-8b17126573ec + a8fc0088-fc34-11ea-b7a2-cb01fadfc47d + a8fc1e56-fc34-11ea-ba16-dbb6261fd981 + a8fc3eae-fc34-11ea-88b7-5bfe515fadc2 + a8fc5c36-fc34-11ea-905b-bba4d1adda87 + a8fc7950-fc34-11ea-ab4b-c343abb58490 + a8fc969c-fc34-11ea-bccb-af220ed0ea3a + a8fcb640-fc34-11ea-b893-abf83ea5b380 + a8fcd63e-fc34-11ea-94ff-4f03386de38d + a8fcf510-fc34-11ea-8630-933c0fe261e5 + a8fd1388-fc34-11ea-bdd4-676bf339f8f7 + a8fd308e-fc34-11ea-a54d-234439bc42f4 + a8fd4d12-fc34-11ea-93e4-5f7a784cc946 + a8fd6e14-fc34-11ea-90da-d3b8b371015a + a8fd8aac-fc34-11ea-94a2-2b435d663f4a + a8fdaf0a-fc34-11ea-b349-b739edc4252e + a8fdd084-fc34-11ea-824b-e38039771c6c + a8fdf0e6-fc34-11ea-a682-63489442383e + a8fe11ac-fc34-11ea-935d-cb525636a809 + a8fe306a-fc34-11ea-9b08-3b967017775d + a8fe4e60-fc34-11ea-9e86-fb3b27a6d2a3 + a8fe6c24-fc34-11ea-81f1-a7d4ac76df29 + a8fe8c04-fc34-11ea-958d-739625d699c0 + a8feab76-fc34-11ea-b52d-1719139e4119 + a8fec9c6-fc34-11ea-9be3-d3d39a53aec1 + a8fee668-fc34-11ea-8117-33179acfedf4 + a8ff04fe-fc34-11ea-a5c4-4b243755b4ae + a8ff248e-fc34-11ea-96bf-9fd09dc700b6 + a8ff42c0-fc34-11ea-a77f-d3184793bf29 + a8ff60b6-fc34-11ea-b3da-8f3823b132aa + a8ff7f10-fc34-11ea-afab-b7b706388fe8 + a8ff9e8c-fc34-11ea-9cfc-6bd365e537b1 + a8ffbc6e-fc34-11ea-b6a2-ab35ca6bc806 + a8ffdd16-fc34-11ea-b198-f7ff4be4a33e + a8fffe36-fc34-11ea-956e-67d3d471103a + a900230c-fc34-11ea-a3ba-8f679a17adee + a9004404-fc34-11ea-98ad-df87b11efac7 + a90062d6-fc34-11ea-a3d8-9791cd3cafd9 + a90085fe-fc34-11ea-a6ed-0f1b321aae82 + a900a818-fc34-11ea-939f-773e45dc9ab7 + a900c5fa-fc34-11ea-95b6-57ae0e3e5f9b + a900e35a-fc34-11ea-a9d8-57f7c64c9ca5 + a900ffca-fc34-11ea-8dd5-a7dfeceed25b + a9011d66-fc34-11ea-b99d-135e852661ed + a9013ba2-fc34-11ea-80ea-c3162a28ca4b + a90158ee-fc34-11ea-869f-2b58da9d679a + a90175ae-fc34-11ea-add4-e72b18fc6ac8 + a901969c-fc34-11ea-86c4-a33e277360b3 + a901b3de-fc34-11ea-a488-e7ed96ffd8a1 + a901d0b2-fc34-11ea-a3a5-bf7d9ab9c3ee + a901ef16-fc34-11ea-8735-13ffc6fa98e1 + a9020ce4-fc34-11ea-8854-f7709be2a767 + a9022cec-fc34-11ea-a7f4-f71e757293ed + a9024a6a-fc34-11ea-bb7d-7f4c55f17fe7 + a9026a2c-fc34-11ea-a8d0-93013391e1ca + a90288d6-fc34-11ea-b34b-5f24e1e99ab8 + a902a708-fc34-11ea-a073-77f1d3763f2a + a902c60c-fc34-11ea-b880-eff28e9a0779 + a902ea88-fc34-11ea-ad29-6f7eaa1c30ef + a9030b44-fc34-11ea-8281-ef527e98a4e1 + a90329ee-fc34-11ea-9eb9-a77317b0940a + a9034c94-fc34-11ea-9f3d-87d6820963a3 + a9036a3a-fc34-11ea-83dd-93e80db2b913 + a90389de-fc34-11ea-83fe-67c9c047051c + a903a766-fc34-11ea-b1a2-ebc289efc53d + a903c566-fc34-11ea-8831-5ba9ae1b5df7 + a903e0c8-fc34-11ea-8fff-cbbe0ce1d752 + a903fdb0-fc34-11ea-a79f-c769d42038d3 + a9041bf6-fc34-11ea-8283-abfd32897221 + a9043924-fc34-11ea-ac1d-6f50ecc32c30 + a904576a-fc34-11ea-aaff-1f5341b1fd9f + a90474ac-fc34-11ea-a90f-333c94d4827f + a90491b2-fc34-11ea-9632-471299e5f9ca + a904afda-fc34-11ea-9bad-ef10d3c42ca9 + a904cf24-fc34-11ea-9e24-7f9c62c24673 + a904ece8-fc34-11ea-808d-8bb149635caf + a9050ac0-fc34-11ea-8018-4f1c1eecd273 + a9052a00-fc34-11ea-b6c0-eb7c1c80d294 + a905497c-fc34-11ea-a4ec-0fbae182d41e + a9056880-fc34-11ea-9028-9b8f1e450ca8 + a905846e-fc34-11ea-922c-3f1106ac69ab + a905a4a8-fc34-11ea-9bc3-9beb4f7a8189 + a905c2f8-fc34-11ea-9d67-b717578759c7 + a905e260-fc34-11ea-b39b-93c98e863afd + a90601aa-fc34-11ea-938e-bf398e838fe2 + a9061ec4-fc34-11ea-b040-4f43aa2adfd4 + a9063c88-fc34-11ea-8d73-bb2223696f2c + a9065948-fc34-11ea-b1f8-7b9cb0a65272 + a9067842-fc34-11ea-a015-a3cbc29495e4 + a90698ae-fc34-11ea-a679-bb34a5e8e30e + a906b7da-fc34-11ea-b88d-7f74388792f1 + a906d5b2-fc34-11ea-ae2f-6f2b12dc260c + a906f3e4-fc34-11ea-928a-bb3232c8e108 + a90712ca-fc34-11ea-9984-d3b686120705 + a9073192-fc34-11ea-8015-d70b78816cdf + a9074f7e-fc34-11ea-ba98-c33089e5925f + a90771de-fc34-11ea-8b6f-2fb8f4bff1cf + a9079286-fc34-11ea-b922-b32eb4c4cb90 + a907b70c-fc34-11ea-91e0-4b6b6f62a02f + a907d91c-fc34-11ea-9a74-a34d24f7835c + a907f7ee-fc34-11ea-a2fd-37930e5b02e2 + a9081bde-fc34-11ea-bf59-735804b948fc + a9083e70-fc34-11ea-a9ae-cf4b9fcc2d84 + a9085e5a-fc34-11ea-a744-0f9fd717102f + a9087c8c-fc34-11ea-9ed8-a31bcbd10712 + a9089a14-fc34-11ea-a438-5becb0c2ce27 + a908b68e-fc34-11ea-a654-1bf0cff81e5f + a908d48e-fc34-11ea-be09-930076f1761b + a908f48c-fc34-11ea-9ff9-13bcc749c9c1 + a90912e6-fc34-11ea-b8cc-5b047f479d1b + a90930be-fc34-11ea-9fd0-13072b0fec0e + a9095080-fc34-11ea-828b-3f94672eba65 + a9096e12-fc34-11ea-ac62-070fe2fe4f8f + a9098c08-fc34-11ea-bb29-cbc249d6bc68 + a909a94a-fc34-11ea-8345-77f86e673c79 + a909c592-fc34-11ea-96f3-63cfb14f4f96 + a909e450-fc34-11ea-a737-43ec0bb2dcfe + a90a04ee-fc34-11ea-9708-af0e336b26b8 + a90a2780-fc34-11ea-8e83-2badc4494385 + a90a4896-fc34-11ea-b01a-274db17acbd1 + a90a67fe-fc34-11ea-8517-d3ccc56a36af + a90a8a86-fc34-11ea-8414-eb8de413bd6b + a90aab56-fc34-11ea-861e-2f1158516099 + a90acbc2-fc34-11ea-8d88-573926ab836f + a90aea76-fc34-11ea-8281-c7d75f5ed94e + a90b07ea-fc34-11ea-8b8e-67270b804e97 + a90b2536-fc34-11ea-bd77-d73b16b1832b + a90b408e-fc34-11ea-b1f3-8fb39b01a07b + a90b5f88-fc34-11ea-8959-bb8bfe8f118f + a90b7d38-fc34-11ea-8dc8-c7a1e2ee6628 + a90b996c-fc34-11ea-8713-bb2547c2f608 + a90bb758-fc34-11ea-b54b-43fea9090700 + a90bd472-fc34-11ea-8f19-0f5053305d95 + a90bf240-fc34-11ea-856d-874ec96e8517 + a90c1220-fc34-11ea-b80c-4fcaa1f9baba + a90c2e90-fc34-11ea-9c59-4b6b19ce84b4 + a90c4a9c-fc34-11ea-81a8-5be3b7df2481 + a90c68c4-fc34-11ea-a54a-6335ac4df3e9 + a90c84f8-fc34-11ea-a66e-8f6bce4915ee + a90ca26c-fc34-11ea-ad70-ef230de4349d + a90cbea0-fc34-11ea-80e2-b33dc1699c03 + a90cddcc-fc34-11ea-89e8-839c0432991a + a90d02a2-fc34-11ea-8c81-eb7e5446eac7 + a90d22e6-fc34-11ea-8bfa-e757a26dfa82 + a90d415e-fc34-11ea-9037-9f66980b50b0 + a90d5f90-fc34-11ea-b612-976ce0204316 + a90d7c0a-fc34-11ea-860b-c3c87bf883ae + a90d9938-fc34-11ea-8b29-a7aebf56ef33 + a90db99a-fc34-11ea-8ee4-4f1478ccde2b + a90dd808-fc34-11ea-91aa-6b08577b39b6 + a90df7d4-fc34-11ea-a1dd-677871661735 + a90e1520-fc34-11ea-aa08-e7ec09622692 + a90e3230-fc34-11ea-8587-9fa38d685881 + a90e4d6a-fc34-11ea-8338-33e7f326d026 + a90e6aac-fc34-11ea-8c87-73f5d7ff59d7 + a90e871c-fc34-11ea-b5ba-23afae4359f8 + a90ea580-fc34-11ea-8a1d-4bdf95167f26 + a90ec45c-fc34-11ea-87de-6b6a87aec61f + a90ee3f6-fc34-11ea-86a3-03d0ea6ff763 + a90f02e6-fc34-11ea-942e-5348b4593d9d + a90f24a6-fc34-11ea-8ebc-0fd8e82f00bc + a90f43be-fc34-11ea-b448-0b4457cb7a87 + a90f6326-fc34-11ea-8f07-c7d91abc8d45 + a90f841e-fc34-11ea-af99-238fefaddfaf + a90fa386-fc34-11ea-9aea-df50be628ac1 + a90fc6a4-fc34-11ea-8c29-57f26b20b4fa + a90fe6f2-fc34-11ea-98c4-7b2b9ef133ef + a9100786-fc34-11ea-8594-9b4f49877520 + a91024be-fc34-11ea-adb1-a3a70eb7151c + a91042dc-fc34-11ea-98f2-3ff2f81817a0 + a9106136-fc34-11ea-b0a9-931ee886d3dc + a9107ef0-fc34-11ea-b845-13014c6b8044 + a9109c78-fc34-11ea-9fed-f337db4545b7 + a910b852-fc34-11ea-a7f4-3fb597073d7a + a910d68e-fc34-11ea-87a4-17622f73163e + a910f3f8-fc34-11ea-bc4f-5399c70921eb + a91112c0-fc34-11ea-9f9f-c3be07c506cc + a9112fee-fc34-11ea-83ae-17b931b5e260 + a9114d6c-fc34-11ea-bc19-8377586d8a33 + a91169dc-fc34-11ea-bd5d-c7853fbce8ad + a9118674-fc34-11ea-a861-db768abc4640 + a911a3fc-fc34-11ea-b93e-c308019b631d + a911c3c8-fc34-11ea-a6f1-d7d46b68ac56 + a911e844-fc34-11ea-b228-d3d39aaafb81 + a91206f8-fc34-11ea-993b-03c00c5faaf2 + a912273c-fc34-11ea-a41b-333b44f1061f + a91245b4-fc34-11ea-ab7d-8f2f22a13998 + a9126508-fc34-11ea-9341-bf89c1ba439b + a91282e0-fc34-11ea-8a89-3b805528a9b7 + a9129e42-fc34-11ea-b4d4-531e9ea93120 + a912beae-fc34-11ea-b04d-4384e9c9debf + a912dcb8-fc34-11ea-9566-ab1a75170eda + a912f9a0-fc34-11ea-8692-5fda5fccddb6 + a9131854-fc34-11ea-9157-a7d67a10acbf + a9133816-fc34-11ea-8aa0-033b4e452e0b + a9135814-fc34-11ea-a150-cf407d873f31 + a9137574-fc34-11ea-a472-332ab5a58139 + a9139126-fc34-11ea-a1c3-c718ea3b0667 + a913afe4-fc34-11ea-9a1d-63c4a3efab90 + a913d30c-fc34-11ea-8e78-83785c3a5a21 + a913f102-fc34-11ea-9970-534818791732 + a9140eee-fc34-11ea-bd1f-233811440d52 + a9142d84-fc34-11ea-8aee-1b384e0e2521 + a9144c1a-fc34-11ea-b8c6-13b333608e75 + a91469fc-fc34-11ea-99cb-47d0e3ea90ac + a9148afe-fc34-11ea-b5f1-0758381ec56d + a914aa52-fc34-11ea-9184-f734182891e8 + a914c6d6-fc34-11ea-a7d9-cfc12cb37f05 + a914e724-fc34-11ea-95f0-3726ee119ece + a9150a60-fc34-11ea-98ec-275643b0b886 + a9152cf2-fc34-11ea-80c6-872b307ff148 + a9154bce-fc34-11ea-9f11-1f5443327211 + a9156abe-fc34-11ea-98d9-371860dcd87b + a9158b8e-fc34-11ea-b223-df0e39aeb801 + a915aaa6-fc34-11ea-b30a-5743d266600d + a915caae-fc34-11ea-870e-1b8434ffe3b0 + a915e994-fc34-11ea-8555-2bd32992fbba + a9160780-fc34-11ea-80a4-dfea112d9340 + a91626fc-fc34-11ea-bb2a-f7bbc9b00f2d + a916427c-fc34-11ea-b415-83d4f8ef67e1 + a91669e6-fc34-11ea-9a26-5bd65dc4dad6 + a9168804-fc34-11ea-bf63-43748dbcd555 + a916a668-fc34-11ea-9dc2-4bc03cf08b21 + a916c7f6-fc34-11ea-a072-0feaa724159d + a916e8c6-fc34-11ea-96ac-1307bc27ca15 + a9170c70-fc34-11ea-aec4-2342dde6aa1f + a9172df4-fc34-11ea-a341-a3bdd1c3f075 + a91752c0-fc34-11ea-89e8-d3e15c4c1f37 + a91772c8-fc34-11ea-9729-071aaabad301 + a91797da-fc34-11ea-ad89-b32a543aa2b1 + a917bae4-fc34-11ea-be32-a3e6ad09a2be + a917d8bc-fc34-11ea-a7a7-4b54e80c41db + a917f6c6-fc34-11ea-829c-2f35456dd70b + a918158e-fc34-11ea-9660-5307ef65ab6a + a91832d0-fc34-11ea-8f96-df3e68e1abfa + a9185120-fc34-11ea-a3f7-43c02b24a042 + a9186db8-fc34-11ea-9341-e33a8c459f66 + a9188b22-fc34-11ea-9690-834c57b19fb3 + a918a7a6-fc34-11ea-ba6e-d755f709eabc + a918c5c4-fc34-11ea-a217-5ff7fbc1bf49 + a918e4d2-fc34-11ea-9420-4f97fa7715b8 + a919011a-fc34-11ea-a206-7f264e00acf7 + a9191f06-fc34-11ea-b31a-df36cc1feb45 + a9193d38-fc34-11ea-8ed6-17d285390b51 + a9195b2e-fc34-11ea-9aa3-abd8bc5e42e0 + a9197b72-fc34-11ea-a485-fb717bba5e67 + a9199ab2-fc34-11ea-91de-bb0df768e2a1 + a919ba42-fc34-11ea-8772-b36a0e853c2f + a919d8c4-fc34-11ea-94f4-b30b44b7e73a + a919fad4-fc34-11ea-ade7-5f243bfc4cd8 + a91a1ce4-fc34-11ea-a017-fbab82068178 + a91a3b3e-fc34-11ea-a086-7f2a1f5172f4 + a91a58e4-fc34-11ea-90dd-6f4715ea9c1f + a91a7752-fc34-11ea-98b6-2bc02082990d + a91a9750-fc34-11ea-9be5-5796274c21a6 + a91ab51e-fc34-11ea-a41b-1fddac759e8a + a91ad404-fc34-11ea-9cc7-3b546c3351fd + a91af1e6-fc34-11ea-b8e2-b7d1893f7dc4 + a91b0e7e-fc34-11ea-8f40-73ef5f61c207 + a91b2cec-fc34-11ea-83ab-9b3a8efc5298 + a91b4902-fc34-11ea-86a2-f76e807cf91e + a91b67c0-fc34-11ea-ae7c-f3d1858b5281 + a91b85e8-fc34-11ea-9dd2-e363cff8719e + a91ba2d0-fc34-11ea-88fd-139ea05d6ae2 + a91bc120-fc34-11ea-bed6-ff46c0077ec7 + a91bdffc-fc34-11ea-82d2-232ee014b632 + a91bfe10-fc34-11ea-8964-a3ce0156773b + a91c1c6a-fc34-11ea-af7e-5371b1cf5cca + a91c40fa-fc34-11ea-925d-cfa056404112 + a91c608a-fc34-11ea-80fd-9f1a6650353d + a91c7fc0-fc34-11ea-b92a-0365adf2e84f + a91ca25c-fc34-11ea-ab9f-bb6352cd6be7 + a91cc174-fc34-11ea-b332-73113fd0b5a3 + a91cde84-fc34-11ea-a795-4b933a8e6797 + a91cfd74-fc34-11ea-9224-df151e879273 + a91d1d68-fc34-11ea-8837-e3f5dfbc2aab + a91d3f28-fc34-11ea-a93a-9f3b9da845c8 + a91d5b3e-fc34-11ea-b1ca-db18cd042f65 + a91d7920-fc34-11ea-b3cc-3375714c398d + a91d9842-fc34-11ea-afd4-0f30c6d9bfa9 + a91dba0c-fc34-11ea-93b3-3f9ff63d515d + a91dd82a-fc34-11ea-8a3b-c3964f08fa14 + a91df634-fc34-11ea-966c-13bfe69dae04 + a91e14ac-fc34-11ea-ac84-a3bd97f4921a + a91e3518-fc34-11ea-9ee2-afcdc2903082 + a91e53d6-fc34-11ea-98d2-db15c86660cb + a91e7820-fc34-11ea-978c-6f0d70d1c551 + a91e986e-fc34-11ea-95a4-b36ee7121d75 + a91eb858-fc34-11ea-9135-a3c8097a4e5b + a91edc48-fc34-11ea-ab2b-27a65278ef87 + a91efdb8-fc34-11ea-b021-4f121ae72c39 + a91f1d7a-fc34-11ea-b8bf-d3ea5fc87b9e + a91f4200-fc34-11ea-9828-0304dcfe73bd + a91f6172-fc34-11ea-8d1a-b31066b82b34 + a91f7fe0-fc34-11ea-8d3a-afd326f2a9b6 + a91f9c6e-fc34-11ea-8c3e-6722a1af472b + a91fb8b6-fc34-11ea-8a8e-e76d84db81fd + a91fd7a6-fc34-11ea-a67c-8373cb8f950d + a91ff4fc-fc34-11ea-8db9-ff40c1cf3114 + a9201298-fc34-11ea-b2ca-2f0540b32e15 + a92031c4-fc34-11ea-9f65-0be3f22bd20d + a9205212-fc34-11ea-a9b6-6779d6611f19 + a9207044-fc34-11ea-ae4b-d777c0cf9940 + a9208ec6-fc34-11ea-8381-4b0c94986567 + a920ab36-fc34-11ea-a39e-2331c56969c4 + a920c94a-fc34-11ea-991f-7f6f3a594a9f + a920e664-fc34-11ea-9fef-6776f5ac10a0 + a9210590-fc34-11ea-acbc-df8f483fbbb7 + a92123b8-fc34-11ea-90e4-2f7a223c0d37 + a92143a2-fc34-11ea-a08a-6f12cf6265d9 + a9216224-fc34-11ea-8ced-d7d1a36a8986 + a92183f8-fc34-11ea-ba76-cf0f73abb3bf + a921a0c2-fc34-11ea-a94e-0352020548a0 + a921c0ca-fc34-11ea-b37e-df7eb0eb5f53 + a921e0d2-fc34-11ea-9b02-872613fc74f9 + a921fd42-fc34-11ea-948a-672c7aea29b6 + a9221b2e-fc34-11ea-822c-b30b090a6a76 + a92239e2-fc34-11ea-9f95-eb688770292e + a92256d4-fc34-11ea-8a64-d32a308bacac + a92273c6-fc34-11ea-884a-ef083317a99b + a92293f6-fc34-11ea-ad3d-1b004db5aefa + a922b0ca-fc34-11ea-b09a-e71c65f30f28 + a922ce5c-fc34-11ea-815c-5bb0439b527d + a922ed74-fc34-11ea-aa48-4f265a9929ef + a9230ade-fc34-11ea-949b-5f94dbd62402 + a923279e-fc34-11ea-985d-fb5c14a4f007 + a9234436-fc34-11ea-81a7-7f72579caad5 + a9236182-fc34-11ea-8d4e-fb0f9399f2b7 + a9238554-fc34-11ea-8e0f-838f87f4d13b + a923a35e-fc34-11ea-ab2c-5f9eaf40c8de + a923c19a-fc34-11ea-aadf-c74971722075 + a923e10c-fc34-11ea-916f-433afbba0cd7 + a923fec6-fc34-11ea-b183-9b7246618dad + a9241e92-fc34-11ea-9b18-7f8c8c65690b + a9244354-fc34-11ea-a500-631fc0724039 + a9246488-fc34-11ea-8339-438f1ab1530c + a924845e-fc34-11ea-b4f4-275911f46a53 + a924a29a-fc34-11ea-8f27-171efdb331f0 + a924bf96-fc34-11ea-81ac-ff81eda63f5a + a924de04-fc34-11ea-9bc6-9b2e0903ee50 + a924fd62-fc34-11ea-8cf1-37d1e75b9fdc + a9251a40-fc34-11ea-a5ac-d3e791e5a754 + a925369c-fc34-11ea-aa10-53eab3f01124 + a925550a-fc34-11ea-8d8f-b354ae294e82 + a9257206-fc34-11ea-bada-df36fdeb27a3 + a9259042-fc34-11ea-ba4b-47808faf3500 + a925ad34-fc34-11ea-a3a1-6322a9c99ac7 + a925cc4c-fc34-11ea-a293-fb5afa16ad32 + a925ea24-fc34-11ea-9410-3b62dbc0c4c8 + a9260aae-fc34-11ea-92d4-27ceea1f5246 + a9262ffc-fc34-11ea-97f5-3b22d20545fa + a9264eb0-fc34-11ea-95e0-5bd01a37ee58 + a9266cb0-fc34-11ea-ba56-736a4e5cdbe2 + a9268f24-fc34-11ea-a09f-f73bc19e48e1 + a926b03a-fc34-11ea-8f19-1f2b040198ae + a926ce94-fc34-11ea-b2db-8bc0678e8e66 + a926eb18-fc34-11ea-8a38-778e879ee0fe + a9270846-fc34-11ea-a029-f756ad14cf00 + a9272664-fc34-11ea-ae5a-d7604621b308 + a9274392-fc34-11ea-b478-333a40128d9c + a9275f94-fc34-11ea-89c6-bfb5cd803433 + a9277ff6-fc34-11ea-bd62-1781e0bd74eb + a9279ef0-fc34-11ea-ae5a-bbd9ce5fb005 + a927bc64-fc34-11ea-9179-eb075fa8653c + a927daaa-fc34-11ea-b9ff-1f970ace1547 + a927f71a-fc34-11ea-a00c-2b6bbf090645 + a92812fe-fc34-11ea-a766-7f18cddebf10 + a92831d0-fc34-11ea-b6cd-333407d9f367 + a9284f94-fc34-11ea-aee9-a35768e89009 + a9286d94-fc34-11ea-8cae-e33108a1f842 + a928901c-fc34-11ea-a22a-dffbb8f1da94 + a928afca-fc34-11ea-a88c-f73aa45383e5 + a928d982-fc34-11ea-86c7-3bffa63ae861 + a928fb56-fc34-11ea-819b-df6d43701b2e + a9291c26-fc34-11ea-bbaa-c790aa350448 + a92940b6-fc34-11ea-acb2-9f65880d2e63 + a9296366-fc34-11ea-9b38-774a66ab22c3 + a9298292-fc34-11ea-b815-7b54a1890389 + a929a128-fc34-11ea-beac-67dad2aafed4 + a929bece-fc34-11ea-8670-5329df8b84d7 + a929dd28-fc34-11ea-8797-0b210a0f4b9b + a929f9de-fc34-11ea-9239-bfec162d8c38 + a92a172a-fc34-11ea-821b-736a3e0ddff9 + a92a35fc-fc34-11ea-b16a-6bbe23c08fda + a92a5384-fc34-11ea-9b09-4b8cab9b17f2 + a92a6f86-fc34-11ea-8b5e-4fa552a65619 + a92a8c46-fc34-11ea-babc-632b8eeade37 + a92aa960-fc34-11ea-8385-c36a9130e19c + a92ac558-fc34-11ea-a1f5-db6851dc122f + a92ae2b8-fc34-11ea-ac92-6f1c793822d1 + a92b0590-fc34-11ea-8a84-fbca6cff5158 + a92b2692-fc34-11ea-a886-b7a048a88bd1 + a92b45e6-fc34-11ea-881f-7785d55d806d + a92b656c-fc34-11ea-a4bc-1f301bd0eccd + a92b8a2e-fc34-11ea-a583-e32936caf36b + a92baba8-fc34-11ea-8291-db1843117763 + a92bc9f8-fc34-11ea-8681-1b2cf619321b + a92be6cc-fc34-11ea-91de-6f9acde96665 + a92c04f4-fc34-11ea-8225-17080af37b3e + a92c216e-fc34-11ea-92e0-4bb96a5b78cd + a92c3ed8-fc34-11ea-ad7e-87aeaa4e6b41 + a92c5c1a-fc34-11ea-9225-b73c9600cfb4 + a92c78a8-fc34-11ea-8bb7-3fe340fd9676 + a92c9716-fc34-11ea-8cbd-6f21b1c07fac + a92cb3e0-fc34-11ea-b3ad-5fe335a98b18 + a92cd0e6-fc34-11ea-b109-17b9313f29c2 + a92ceed2-fc34-11ea-84ca-f7f57695f914 + a92d0da4-fc34-11ea-ab55-67de0723d772 + a92d2bc2-fc34-11ea-b624-6fbf8233cfb8 + a92d4922-fc34-11ea-a010-4bbbab11500d + a92d6754-fc34-11ea-a000-b3e94438d2a0 + a92d8518-fc34-11ea-8e7e-f3cb64531090 + a92da6b0-fc34-11ea-adc1-2305e5ad0b93 + a92dc62c-fc34-11ea-acb1-4f1faf458549 + a92de5ee-fc34-11ea-a148-c78b3b5ca908 + a92e065a-fc34-11ea-a57a-f79386154a24 + a92e2496-fc34-11ea-8bab-7f77b5c748e4 + a92e444e-fc34-11ea-8435-1b26245713ef + a92e6424-fc34-11ea-bc80-cbfeee63ed94 + a92e809e-fc34-11ea-9a3e-db290eb483f6 + a92e9e6c-fc34-11ea-a940-2fb693564d66 + a92ebc08-fc34-11ea-b6a5-b3d3f98afefd + a92edbde-fc34-11ea-9fa8-a317127c453b + a92ef8d0-fc34-11ea-88dd-632fb480406e + a92f16da-fc34-11ea-8b2e-27b3c6fb0352 + a92f3570-fc34-11ea-9da5-5ba5229d3031 + a92f550a-fc34-11ea-a32a-6f3dc5734f06 + a92f7404-fc34-11ea-a5a7-0f78884649ea + a92f9240-fc34-11ea-b600-e307b5606723 + a92fb36a-fc34-11ea-9aa4-5f6b4f0b2ccb + a92fd21e-fc34-11ea-8151-f762a21dfe71 + a92fef10-fc34-11ea-9822-47778ede22a3 + a9300ad6-fc34-11ea-b339-6f0f7cb92694 + a9302dc2-fc34-11ea-9ca3-ab4b8a539fed + a9304d84-fc34-11ea-9d57-1f494a36baf9 + a9306cd8-fc34-11ea-81fb-33f8f9bbe0ed + a9308b96-fc34-11ea-869c-6727c2d97398 + a930a9a0-fc34-11ea-b291-6b9646b5e5b6 + a930c7b4-fc34-11ea-b244-a77bb67c7914 + a930e564-fc34-11ea-b60a-4bc97ecfd33f + a93103c8-fc34-11ea-b2c6-3fa51a0ffcc3 + a9312042-fc34-11ea-b7ed-b3dbfb9a6604 + a9313eba-fc34-11ea-855f-0796477bdb3f + a9315d50-fc34-11ea-bd54-4b26ea6fc75d + a9317984-fc34-11ea-8f66-8fff6617e4bb + a93197ca-fc34-11ea-85a1-37fc670eb24a + a931b732-fc34-11ea-95e4-2b35825516bb + a931d4d8-fc34-11ea-8332-3b919b7cdc87 + a931f4ae-fc34-11ea-99b3-232ab15bb03f + a9321240-fc34-11ea-81c7-0f125a6e66d8 + a932357c-fc34-11ea-ac47-67dd1bbe3e4a + a93254da-fc34-11ea-8dfe-6fe8730cd2c6 + a9327104-fc34-11ea-8003-17fb00e20c3a + a9328fb8-fc34-11ea-a12a-2f152ffe72d2 + a932af16-fc34-11ea-8c96-8b35fbb5bb29 + a932cde8-fc34-11ea-ad15-07d975e8b2f3 + a932ec60-fc34-11ea-a21b-b79313d54ed9 + a9330ede-fc34-11ea-9438-f7f6da846ae0 + a9333396-fc34-11ea-945f-cfeb38641d2c + a9335402-fc34-11ea-b38d-b37147052df7 + a9337554-fc34-11ea-a568-8f5aaa7d667f + a9339368-fc34-11ea-8d18-0ff56f00eb22 + a933af92-fc34-11ea-9b15-eb38b9b34105 + a933cd4c-fc34-11ea-86b3-3b62b236441f + a933eb9c-fc34-11ea-9e45-4f2df32dfc06 + a9340924-fc34-11ea-9a52-4fffbf0482c0 + a934268e-fc34-11ea-b81f-43bef42a15b5 + a934445c-fc34-11ea-8e95-b7120a2822e4 + a9346356-fc34-11ea-8f8f-4fe800fadfe2 + a93480e8-fc34-11ea-94f8-43335a3a50bd + a9349e2a-fc34-11ea-9c6e-abed9bd2da08 + a934bbee-fc34-11ea-86c1-dfbb1e4e80cc + a934db60-fc34-11ea-bcf7-6bd9b143dae6 + a934fbfe-fc34-11ea-8933-4b19f11616a0 + a93518f0-fc34-11ea-bd5a-3f32f7ab38b9 + a9353592-fc34-11ea-a7bc-af522f1721d0 + a93556d0-fc34-11ea-adf0-d3b370ed78fc + a93579a8-fc34-11ea-8e80-bb8fc926c8dc + a9359992-fc34-11ea-b8d7-8766d070ca3d + a935bf12-fc34-11ea-8076-5ba1feb70d7f + a935e802-fc34-11ea-aa40-576b1e62a6c5 + a9360ec2-fc34-11ea-b8b1-73dc077485e7 + a9363640-fc34-11ea-abd5-cb7ae321a033 + a936571a-fc34-11ea-9bdb-bf9ceca2a353 + a9367b82-fc34-11ea-a9e4-7f51db61dd52 + a936a1ac-fc34-11ea-bd98-3b1536b03c1d + a936c3c6-fc34-11ea-b769-e382a75ed8d0 + a936e252-fc34-11ea-9094-b32fc62849d9 + a9370ab6-fc34-11ea-84dd-433c349a9be0 + a9373086-fc34-11ea-8750-6339146b9e7e + a9375098-fc34-11ea-8dc9-6bb90fa01db8 + a937721c-fc34-11ea-a065-13e904a2de4e + a93790bc-fc34-11ea-9941-bbd41551aee1 + a937ae1c-fc34-11ea-a111-53d41ee116aa + a937e936-fc34-11ea-8833-1b6692a0e641 + a9381172-fc34-11ea-b031-13ff30894104 + a9383904-fc34-11ea-8dff-c3ea8f40bbee + a9385c40-fc34-11ea-a149-63bb2fc89199 + a938821a-fc34-11ea-9531-8fc05220ff04 + a938abc8-fc34-11ea-8e7f-6374cf8cbbb9 + a938cf72-fc34-11ea-858a-6beddc19a74e + a938f45c-fc34-11ea-92de-373358c78c75 + a93917de-fc34-11ea-b675-436cb0f4d200 + a9393fc0-fc34-11ea-b3c5-4b605f4ac3a6 + a939604a-fc34-11ea-8d86-7fd0c3c9fed3 + a9398124-fc34-11ea-88e6-3fb09cf368a8 + a939a258-fc34-11ea-a765-7333f9cd9b7b + a939c116-fc34-11ea-98ca-2770acb48937 + a939dfe8-fc34-11ea-a6d8-4fed9af3b39b + a939fe74-fc34-11ea-a594-4769e717e686 + a93a1a94-fc34-11ea-b85c-833b1c6d5f15 + a93a377c-fc34-11ea-8e86-f337a95a9d8e + a93a5518-fc34-11ea-813f-4b8109a1a288 + a93a728c-fc34-11ea-b7ce-5f31ded41050 + a93a9258-fc34-11ea-a97f-cb19b5560b80 + a93ab0d0-fc34-11ea-ac74-5f4af29f5408 + a93ad506-fc34-11ea-b621-6740268a13e0 + a93af464-fc34-11ea-babf-3b7d77dd993e + a93b119c-fc34-11ea-8406-cf7b358fb7a1 + a93b2f38-fc34-11ea-ae38-7f3c99b0678e + a93b4c48-fc34-11ea-b5d4-8bad8a4b5a41 + a93b69f8-fc34-11ea-891d-bf2bee9a8b73 + a93b897e-fc34-11ea-8e16-93e030b2a94a + a93ba6f2-fc34-11ea-bf81-333cf7ed09fa + a93bc6e6-fc34-11ea-a3fb-df0f7f598699 + a93bebb2-fc34-11ea-89f1-53b6ffbb2238 + a93c0bf6-fc34-11ea-9db1-a37b215470d5 + a93c2f32-fc34-11ea-b05f-07493ff8b8d4 + a93c4efe-fc34-11ea-9349-bffeb5d8547e + a93c6f06-fc34-11ea-8437-d781d9a8f20d + a93c91c0-fc34-11ea-8e7d-9f6d5e222115 + a93cb95c-fc34-11ea-a4b4-8fb496086384 + a93cf6f6-fc34-11ea-87a5-ab2b5deb7dea + a93d3490-fc34-11ea-909b-fb044aafc8f1 + a93d6ab4-fc34-11ea-b3e6-6fa5ca6e0957 + a93d8dc8-fc34-11ea-8030-2b17ab6c541c + a93dad58-fc34-11ea-a051-43bc532061e4 + a93dd1c0-fc34-11ea-87f6-6ff5e5757fdd + a93df11e-fc34-11ea-a2f3-4fa7ee7ec01f + a93e0e92-fc34-11ea-9cbc-a313bd002e6d + a93e2cce-fc34-11ea-bfc2-bb37481fc7d2 + a93e4a38-fc34-11ea-9a3b-77b15dedd406 + a93e672a-fc34-11ea-900a-7bf052570f80 + a93e8282-fc34-11ea-aa4c-236c7fc202f4 + a93ea1c2-fc34-11ea-83e4-e754cf426c9f + a93ebee6-fc34-11ea-b665-93b43e82002c + a93edcb4-fc34-11ea-aa97-af2bc08393d7 + a93efb54-fc34-11ea-afa4-57aa48e06966 + a93f1b02-fc34-11ea-abde-7f7d3c2074a9 + a93f37b8-fc34-11ea-9871-973534a3d817 + a93f56c6-fc34-11ea-9a8f-8f5190320177 + a93f7746-fc34-11ea-9ec0-079ec8fe7a38 + a93f9686-fc34-11ea-8bc2-1304088ed674 + a93fb60c-fc34-11ea-83d7-2707d16d0cf3 + a93fda24-fc34-11ea-b08a-87caf1cc1259 + a93ffce8-fc34-11ea-9511-47f22251be2c + a9401d0e-fc34-11ea-a47c-ff4b9a973e8b + a9403b2c-fc34-11ea-b506-636025911ca9 + a940574c-fc34-11ea-8b7a-cbfdb165f2be + a94077b8-fc34-11ea-8e0a-63064e9e0759 + a940969e-fc34-11ea-b1af-ef249da73540 + a940b3a4-fc34-11ea-877b-1fb65e985825 + a940d28a-fc34-11ea-88bf-77afabbab811 + a940f3c8-fc34-11ea-8d2b-375e0423a9e8 + a9411196-fc34-11ea-a742-8b277033f114 + a9412e7e-fc34-11ea-9204-7b49613ac90d + a9414ca6-fc34-11ea-b5b9-b3b560596335 + a9416858-fc34-11ea-a5d3-fbb56f8190c1 + a9418450-fc34-11ea-bf0a-c778edcda5b9 + a941a264-fc34-11ea-926b-4735522bab2f + a941be98-fc34-11ea-ab2b-5f7e62b97cc2 + a941ddd8-fc34-11ea-80f4-a744fcfdb54f + a941fcdc-fc34-11ea-a880-f392bec7e777 + a9421b0e-fc34-11ea-a56c-cf1cbe69bab6 + a9423a1c-fc34-11ea-a523-676e4d2e0d7b + a9425e52-fc34-11ea-9601-6b45b4763a6f + a942808a-fc34-11ea-8240-c7202e7578fc + a942a11e-fc34-11ea-b6b1-bf64ca06c321 + a942c072-fc34-11ea-bbc0-afb723ec53c7 + a942dfda-fc34-11ea-a6c2-a71c800ff161 + a942fdbc-fc34-11ea-ab67-bfaffeda419d + a9431950-fc34-11ea-aa1d-f7b86e4fd0d1 + a94338fe-fc34-11ea-9d3c-0394abe4a50c + a9435758-fc34-11ea-919b-7ff3dbe13a40 + a9437486-fc34-11ea-a1ab-073118ae2d35 + a9438fc0-fc34-11ea-b074-a7a3c130cd65 + a943ad16-fc34-11ea-b23d-735b12462f2b + a943cab2-fc34-11ea-b422-3f22ced27018 + a943e916-fc34-11ea-9b8a-c3173d2580e6 + a94407a2-fc34-11ea-a613-57cc6ec16ba4 + a94424ee-fc34-11ea-b75a-734482496712 + a94441fe-fc34-11ea-89a6-1b90ae4458fe + a9445e50-fc34-11ea-9135-a7158de0fe4a + a9447d7c-fc34-11ea-a3b2-678e6bea0772 + a9449c80-fc34-11ea-a744-f7ea7ba16936 + a944c03e-fc34-11ea-a828-bb196a793849 + a944e082-fc34-11ea-be63-dbcc5ce0acfc + a94500a8-fc34-11ea-a2c5-b77ee4eac220 + a945254c-fc34-11ea-992c-cfd8e7244199 + a9454734-fc34-11ea-8ee4-db1f54cc0412 + a9456ac0-fc34-11ea-abc7-a37cd38c9009 + a9458abe-fc34-11ea-a2e3-7bf4776f4889 + a945a698-fc34-11ea-ac57-6ff96b8f92d0 + a945c506-fc34-11ea-a57c-8f67f3d85580 + a945e338-fc34-11ea-b742-4f8145562885 + a9460750-fc34-11ea-aa9c-7371dd4b9c31 + a9462686-fc34-11ea-975a-172d0cca6d89 + a9464544-fc34-11ea-9535-af934c6d7f7a + a946638a-fc34-11ea-a66e-6b5ece00be14 + a94680cc-fc34-11ea-96cd-d3f41bca855a + a9469e9a-fc34-11ea-970d-d3644458a0f2 + a946bb3c-fc34-11ea-9ce4-ff768c5ba25a + a946d9b4-fc34-11ea-941b-dfca20e4016b + a946f8ae-fc34-11ea-895e-4f3963fcb9e5 + a947173a-fc34-11ea-be43-8773577d560b + a947354e-fc34-11ea-834b-ab6260372d97 + a94758d0-fc34-11ea-ab20-77385732ee6d + a9477b8a-fc34-11ea-9710-97bfb254f476 + a9479a3e-fc34-11ea-b99e-6fe69dac9b33 + a947b906-fc34-11ea-82e4-bbfb15cc25d2 + a947d79c-fc34-11ea-9834-c71b6c2f94c2 + a947f650-fc34-11ea-a26b-e333e27661e1 + a9481536-fc34-11ea-a47c-a3a68a2c7233 + a948343a-fc34-11ea-99fc-7764579c9468 + a9485190-fc34-11ea-983c-477f760b6423 + a9486e1e-fc34-11ea-bb1f-43d724cfe14b + a9488e26-fc34-11ea-af10-a322c45129f9 + a948abd6-fc34-11ea-a7b6-a766592925bf + a948c8aa-fc34-11ea-85ec-e7195b94914f + a948e592-fc34-11ea-9f59-e3ed20e7c63b + a9490310-fc34-11ea-9f80-cbda697d20ca + a94922aa-fc34-11ea-b40c-4b24a0805a61 + a9494046-fc34-11ea-b7fc-bf462bc473b2 + a9495c20-fc34-11ea-a9c5-1bcf323c9199 + a9497a2a-fc34-11ea-9a5c-dbba86865f79 + a9499668-fc34-11ea-875a-4bc72049e297 + a949ba4e-fc34-11ea-89c2-9bb6583d6a26 + a949dbdc-fc34-11ea-970c-7f27aa41342c + a949fbb2-fc34-11ea-8e11-8b97f801e613 + a94a1ce6-fc34-11ea-8043-039054d0fe90 + a94a4130-fc34-11ea-ba98-539e588828ab + a94a62fa-fc34-11ea-abf5-07c99f54a902 + a94a81d6-fc34-11ea-b26e-6f75349bbee7 + a94a9fc2-fc34-11ea-b5e1-dbd945aa3eaa + a94abfc0-fc34-11ea-ad87-cfa7c5404c4e + a94adf6e-fc34-11ea-948f-33d0d30b88bd + a94afd50-fc34-11ea-8f90-9370cee2fe89 + a94b18ee-fc34-11ea-bf73-0fd9fc47fca7 + a94b377a-fc34-11ea-a76a-b704e0cd3960 + a94b5840-fc34-11ea-9f88-eb56cee31089 + a94b77a8-fc34-11ea-80d9-c71d8322dc66 + a94b9724-fc34-11ea-a20e-a72bd048ca5d + a94bb42a-fc34-11ea-b12b-0bf24287e2da + a94bd20c-fc34-11ea-b476-97ee7ed1c9fd + a94bf016-fc34-11ea-9119-e7ce8f0fb4da + a94c0ef2-fc34-11ea-b2a9-5397c4430203 + a94c2d2e-fc34-11ea-af46-53f95d0baf41 + a94c4b24-fc34-11ea-a4ec-831e91542d81 + a94c6eba-fc34-11ea-adce-035c70a757bd + a94c90b6-fc34-11ea-a76f-3377854b44a8 + a94cb5d2-fc34-11ea-a519-ef0c761b1cb3 + a94cd616-fc34-11ea-bd0d-0ffb2c829b93 + a94cf466-fc34-11ea-90c6-2f7fa7d47585 + a94d148c-fc34-11ea-b514-a75ea4cec6b7 + a94d35fc-fc34-11ea-8961-fbd2d640a735 + a94d54e2-fc34-11ea-b41e-ebb8c875363b + a94d72b0-fc34-11ea-90e0-2f8e8157ca9a + a94d90d8-fc34-11ea-9bad-b34a1f1a9da7 + a94db0a4-fc34-11ea-8060-83cc5042f1fd + a94dce4a-fc34-11ea-8f13-83d1ed8e7743 + a94dea38-fc34-11ea-95e4-83b964853405 + a94e0b4e-fc34-11ea-bad7-a727da88f4bd + a94e2a52-fc34-11ea-84c6-8b42511be182 + a94e4726-fc34-11ea-a7b4-47de4807a227 + a94e6bfc-fc34-11ea-9041-9f491be79bdc + a94e8a10-fc34-11ea-8198-d3491ee38908 + a94ead6a-fc34-11ea-b91b-5fb64ae87ce0 + a94ecd04-fc34-11ea-82d5-97485be33bad + a94eecbc-fc34-11ea-9395-9bde8670b047 + a94f0fe4-fc34-11ea-a719-3b0fdaadf817 + a94f312c-fc34-11ea-824f-1723b3382c20 + a94f535a-fc34-11ea-af34-b77a026ce4fe + a94f7286-fc34-11ea-b77b-cb39a623ab15 + a94f90c2-fc34-11ea-8181-1fe5b714c986 + a94fad3c-fc34-11ea-826e-0fefa98a7e99 + a94fcb14-fc34-11ea-8c8d-c302cfa1e4ac + a94fe978-fc34-11ea-8ae8-bf83147f36bd + a950069c-fc34-11ea-aaf1-e75ed04a52a3 + a95023c0-fc34-11ea-a1c7-bfb2bd85ac47 + a9504224-fc34-11ea-b534-c37296cca7ce + a9505e12-fc34-11ea-b6d0-d7fd50233518 + a9507cda-fc34-11ea-926e-43b5f0fa0e87 + a95098c8-fc34-11ea-b825-731dae57af8e + a950b448-fc34-11ea-b5ba-d3b729a203fb + a950d1da-fc34-11ea-8819-dfda2e1ed08e + a950f282-fc34-11ea-b67d-0f98a7cd93ad + a9510efc-fc34-11ea-a44a-979868d12eb0 + a9512c5c-fc34-11ea-be76-27595217da2d + a9514cdc-fc34-11ea-8b9d-a768fa014527 + a9516c6c-fc34-11ea-8309-7b8d24416855 + a9518fd0-fc34-11ea-bbec-4be6fe2246e7 + a951b0e6-fc34-11ea-a17c-3b284f7c74fe + a951d06c-fc34-11ea-9d3a-6fa90f416c76 + a951ee6c-fc34-11ea-b03f-8f9f5f95c5dd + a9520dfc-fc34-11ea-9c39-83cc4b2f3efd + a9522d32-fc34-11ea-8545-87e7b693c74c + a9524d26-fc34-11ea-a4ec-b7ccc09873d8 + a9526af4-fc34-11ea-8983-2b031d9e8de8 + a9528ad4-fc34-11ea-b3ae-5bf186aed9c5 + a952a7c6-fc34-11ea-9464-abc0cbf030fd + a952c648-fc34-11ea-8d83-87c38b1498ca + a952e42a-fc34-11ea-ae73-2f4857d6f7f6 + a953031a-fc34-11ea-8d62-cfc7b7ec52ed + a9532250-fc34-11ea-977d-eb8cda9aca08 + a9533e20-fc34-11ea-a195-73420eb57704 + a9535c5c-fc34-11ea-9194-67276fc9d9c2 + a9537c5a-fc34-11ea-a955-5f2757070df4 + a9539960-fc34-11ea-8656-27450c0ba989 + a953b986-fc34-11ea-a318-b73b39606367 + a953da4c-fc34-11ea-93eb-7bf939408cc4 + a953fa2c-fc34-11ea-b661-ebf3068cfa27 + a9541890-fc34-11ea-9c2b-736783193bac + a9543762-fc34-11ea-a402-6757db3136e3 + a954565c-fc34-11ea-846a-5f6353f3d8e1 + a95476e6-fc34-11ea-bce4-83f8cf06850d + a9549b8a-fc34-11ea-a518-47de1b6d9a0b + a954bb60-fc34-11ea-91be-f7b2119e4a9d + a954d9a6-fc34-11ea-bce1-efae9c3147e5 + a954f814-fc34-11ea-b95e-a3732c3c4a38 + a955154c-fc34-11ea-b676-db654300f0a9 + a95531d0-fc34-11ea-8cbb-13f143118f45 + a9554f6c-fc34-11ea-a59e-b7988594ee2e + a9556bf0-fc34-11ea-8253-f303583bc5fb + a9558900-fc34-11ea-b884-3fc149ff8c09 + a955a91c-fc34-11ea-a6c5-cba1b8741ea8 + a955c6cc-fc34-11ea-b31b-5781b857bd8d + a955e40e-fc34-11ea-a813-a3217aeb8f29 + a95600e2-fc34-11ea-9dab-dbec2fab9ac6 + a9561eec-fc34-11ea-8fd6-af9715f0521c + a9563d0a-fc34-11ea-a012-437d407cdfd9 + a95659e8-fc34-11ea-a3a3-371209074588 + a956766c-fc34-11ea-8988-4b560d9f1026 + a95694da-fc34-11ea-8866-67b760a0f2b0 + a956b46a-fc34-11ea-b42c-1365a2f29a52 + a956d8fa-fc34-11ea-94e0-b38122e9319e + a956f894-fc34-11ea-95d2-5fd835247ec6 + a95716e4-fc34-11ea-906f-a7d5d29f7114 + a95735ca-fc34-11ea-afbb-5f00343ef365 + a95754ce-fc34-11ea-80d1-e354fc522eb8 + a95773d2-fc34-11ea-bbdb-df57ca86c417 + a9579358-fc34-11ea-baad-f7b583f15281 + a957b09a-fc34-11ea-91b3-4b03789dcbf8 + a957cf12-fc34-11ea-9f00-7f8523c01f76 + a957ec0e-fc34-11ea-81b8-5b1d326754c3 + a958095a-fc34-11ea-a3d5-235aa86e090f + a9582610-fc34-11ea-849f-efd179009420 + a95842ee-fc34-11ea-a84b-d358e4984b33 + a95863d2-fc34-11ea-b580-1b80fb5a6566 + a958818c-fc34-11ea-be8f-27e082c36b8e + a958a13a-fc34-11ea-8924-ffe0703c3cac + a958bf6c-fc34-11ea-8ea9-73f520b7bd8e + a958de16-fc34-11ea-8e61-271ca304d21c + a958fc70-fc34-11ea-9bc9-a3a10cb667e9 + a9591ab6-fc34-11ea-9d85-eb8823472398 + a9593ed8-fc34-11ea-a9dc-ab6b7024fe65 + a95963f4-fc34-11ea-91fb-4b3d52393021 + a95984ba-fc34-11ea-82a4-ef52567604b7 + a959a4ae-fc34-11ea-9828-f7d19e667106 + a959c178-fc34-11ea-b374-f796e62512b8 + a959dcda-fc34-11ea-87ec-4f2d21335163 + a959faee-fc34-11ea-be85-bb2a68c9f109 + a95a1aba-fc34-11ea-adb2-136579d0f3c5 + a95a3a22-fc34-11ea-90f3-1b5b0183c80a + a95a5750-fc34-11ea-bb1a-1b3b8f6d4c22 + a95a750a-fc34-11ea-80a6-ebda2ad68a4c + a95a921a-fc34-11ea-920d-2f74597ab1c9 + a95aaf98-fc34-11ea-ac8e-17dd280728d7 + a95accc6-fc34-11ea-84b8-d34ff61191f1 + a95aebac-fc34-11ea-988a-875e76d72da1 + a95b0858-fc34-11ea-9300-8f26d9a15ee3 + a95b22b6-fc34-11ea-9237-43971fc0aa3a + a95b4228-fc34-11ea-bff8-b37e1b55cc10 + a95b617c-fc34-11ea-aa31-03d88a190146 + a95b81e8-fc34-11ea-9ba2-1f6d96ecd7a0 + a95ba11e-fc34-11ea-bd1a-37535cb0ade4 + a95bc072-fc34-11ea-b77b-b30e02330715 + a95be49e-fc34-11ea-bd27-fb9afa6dadfd + a95c0456-fc34-11ea-9c15-871c09583a36 + a95c230a-fc34-11ea-a037-07a10217bfc3 + a95c4240-fc34-11ea-8246-234162313479 + a95c60a4-fc34-11ea-a69b-1fcb17605398 + a95c8264-fc34-11ea-ac44-8beb4630fec4 + a95ca064-fc34-11ea-acbe-eb33ad919ef6 + a95cbcde-fc34-11ea-be52-371cbf4e5c56 + a95cdb9c-fc34-11ea-ba7c-2fb5e103359b + a95cf8e8-fc34-11ea-a1a5-a7bbddf1ccae + a95d1652-fc34-11ea-accf-476c79a3f616 + a95d35d8-fc34-11ea-ad72-2f0f622a4129 + a95d557c-fc34-11ea-a094-0fe7db806cc6 + a95d7246-fc34-11ea-98e4-e74d40dc1c67 + a95d90a0-fc34-11ea-bbd0-43869a1920e8 + a95dafa4-fc34-11ea-9e98-a744c92667a4 + a95dcf8e-fc34-11ea-af08-affb23440399 + a95deb68-fc34-11ea-9ba3-6bffc4f8b55d + a95e0850-fc34-11ea-aa4f-3f253e5f774c + a95e2786-fc34-11ea-b66f-fb4565d75626 + a95e51b6-fc34-11ea-9b40-ab2019a7b123 + a95e727c-fc34-11ea-8714-8fb8235eebcf + a95e91a8-fc34-11ea-abff-a7394e8b3d99 + a95eb2e6-fc34-11ea-a6ae-63ec3829ee30 + a95ed104-fc34-11ea-bf67-6fc8d1c6f71f + a95eef18-fc34-11ea-b463-e33edd7a6ddc + a95f0be2-fc34-11ea-b5e1-97f859c3f988 + a95f28ca-fc34-11ea-b0a4-9b2d8ef1418a + a95f45a8-fc34-11ea-b78b-1b630826aa7c + a95f63e4-fc34-11ea-b655-c3eaf331e116 + a95f8252-fc34-11ea-bdfd-3fa7cc48d2d7 + a95f9f8a-fc34-11ea-b556-9f1753add8a1 + a95fbe7a-fc34-11ea-bfcb-5b489d3f80d7 + a95fdea0-fc34-11ea-b8bf-7b3449b74037 + a95ffe58-fc34-11ea-b5ad-bfcc9932e61d + a9601d0c-fc34-11ea-9097-ef90bbd527d1 + a9603c38-fc34-11ea-84ff-53aeea1a6b21 + a96059d4-fc34-11ea-b6cf-ebbb58357e97 + a9607630-fc34-11ea-8c2b-a7f990972552 + a96092be-fc34-11ea-9369-07eb8c46c8dc + a960b5b4-fc34-11ea-97fa-fb99e0fa7d16 + a9617396-fc34-11ea-bc06-538220921ec5 + a961936c-fc34-11ea-904d-7bed7b7f7448 + a961afdc-fc34-11ea-9ecc-df3bc94c0173 + a961cfda-fc34-11ea-af32-c7e5a3d43100 + a961ec2c-fc34-11ea-8e0e-af4f63a97ed6 + a96208c4-fc34-11ea-813f-03f193379a20 + a96228ea-fc34-11ea-8486-8743d1e67db3 + a96245fa-fc34-11ea-821f-bb65e2272ad9 + a96261ac-fc34-11ea-9a12-6758a26e489a + a9627f02-fc34-11ea-88be-bf0dfb949479 + a9629ee2-fc34-11ea-a17d-e78d01bfbf61 + a962be72-fc34-11ea-8823-63e10bd7c858 + a962db28-fc34-11ea-aaf7-4368b0155e7c + a962f9d2-fc34-11ea-b1a7-c302a326425c + a96317c8-fc34-11ea-9ab7-af7a5b70ee6c + a9633b90-fc34-11ea-bfb5-d774222823c0 + a9635ba2-fc34-11ea-855d-df4b9a110cae + a9637dd0-fc34-11ea-9e09-73b0e88031ff + a9639a90-fc34-11ea-9cf4-4b9d685f4683 + a963bc0a-fc34-11ea-807d-936932fa263c + a963dca8-fc34-11ea-9bc7-eb872b1f6cc2 + a963fada-fc34-11ea-8559-cf983cfb2203 + a9641880-fc34-11ea-8c18-636ca846a4a8 + a96436da-fc34-11ea-aa7e-07c6bf739029 + a96453fe-fc34-11ea-b206-0b8337339b20 + a96471fe-fc34-11ea-8299-53ad9378dede + a9649076-fc34-11ea-a0a0-6bfaa19afbbf + a964ad22-fc34-11ea-b1ea-af29eb177990 + a964ca14-fc34-11ea-b64f-6326f3fb3ea1 + a964e81e-fc34-11ea-9518-7f09cf820c88 + a96504fc-fc34-11ea-b8ee-23ff489351e5 + a965227a-fc34-11ea-939e-0f670cd52f6f + a96541d8-fc34-11ea-8a67-3bed547aa4fc + a9655f4c-fc34-11ea-922e-c73809dfb337 + a9657c02-fc34-11ea-b839-6f12a72d8d9c + a9659994-fc34-11ea-a4d1-3bdd1526caab + a965bc1c-fc34-11ea-8079-938a61e9fd72 + a965dd8c-fc34-11ea-9f16-cfb2f2c07544 + a965fdf8-fc34-11ea-a2ac-d36165eef523 + a96622d8-fc34-11ea-9565-a33e77c56f83 + a96642ae-fc34-11ea-ac27-ab31739e04d7 + a96660fe-fc34-11ea-837e-4fd8d9583abb + a96681ec-fc34-11ea-87bc-0bbbf8f8399c + a966a0be-fc34-11ea-af62-a3d2b61e1689 + a966be14-fc34-11ea-8aea-9386e0f83af4 + a966da48-fc34-11ea-bb07-bfd686f043aa + a966f9f6-fc34-11ea-8a52-c3d38c6da059 + a9671af8-fc34-11ea-b2dd-67a820145a80 + a96737cc-fc34-11ea-a0c6-07a06b1d05b0 + a9675568-fc34-11ea-8376-73e809d300e9 + a967732c-fc34-11ea-86e2-232484f03722 + a9679014-fc34-11ea-8b06-2ba7a18aedc0 + a967acde-fc34-11ea-ad50-531cfb6e0586 + a967cae8-fc34-11ea-be5c-7b8148530bee + a967e744-fc34-11ea-a684-cf3eac03643f + a968092c-fc34-11ea-aa0e-4fd105bb6255 + a9682790-fc34-11ea-b272-f763f4dad936 + a9684518-fc34-11ea-9c16-27003a6c4792 + a96864bc-fc34-11ea-a939-b739405c5f3e + a96882e4-fc34-11ea-8f1b-ff76c5abff35 + a968a242-fc34-11ea-aadb-1b5c06d4c426 + a968c664-fc34-11ea-b579-832a8faff842 + a968eb08-fc34-11ea-984e-5f8ed8d3c250 + a96909c6-fc34-11ea-994d-ef845c4efa48 + a969299c-fc34-11ea-8abb-0302db644d37 + a969486e-fc34-11ea-9815-d3fa5fee230a + a96967ae-fc34-11ea-a3bb-fb4ddc1da13c + a969864e-fc34-11ea-8427-47505ad4c2f1 + a969a390-fc34-11ea-b646-cbe964ded34b + a969c24e-fc34-11ea-889c-b369babe45a5 + a969dea0-fc34-11ea-b606-d3674b5867d7 + a969fb38-fc34-11ea-991a-0b9947cafd48 + a96a1a6e-fc34-11ea-8e61-ff526850e3e7 + a96a37ba-fc34-11ea-af12-076fa0fd9a9b + a96a55ce-fc34-11ea-a115-bbc39d183623 + a96a734c-fc34-11ea-962f-bf91bb5390f0 + a96a90e8-fc34-11ea-bdb3-671b5a2d6ec7 + a96ab2da-fc34-11ea-adec-cf0cef060f66 + a96ad238-fc34-11ea-991c-f385e7feedf6 + a96af3d0-fc34-11ea-ac9f-67d2ae249030 + a96b11a8-fc34-11ea-a710-a32c06edaa1b + a96b3570-fc34-11ea-80e9-afe0f767f6a1 + a96b5690-fc34-11ea-9ec5-e32cd8d95689 + a96b75c6-fc34-11ea-98bb-f77714f96752 + a96b93c6-fc34-11ea-a84c-3787b5c11e25 + a96bb040-fc34-11ea-bcbb-57378bfa8783 + a96bce90-fc34-11ea-a19a-cb866a75003f + a96bec5e-fc34-11ea-a486-4303ef387922 + a96c0ab8-fc34-11ea-b1d2-ebfaef83997f + a96c27be-fc34-11ea-9b2c-a38b9f452547 + a96c4424-fc34-11ea-ad3b-8f0c7ffb236a + a96c610c-fc34-11ea-bd42-ef40d9b11b06 + a96c7e4e-fc34-11ea-80c9-af0ff6f72f47 + a96c9b86-fc34-11ea-8649-674478838a9c + a96cba80-fc34-11ea-b8ea-ebc868e59bd5 + a96cda56-fc34-11ea-bca4-4f0451db38cb + a96cf72a-fc34-11ea-9d9c-17c3dc969b48 + a96d15d4-fc34-11ea-ac21-8727217d946c + a96d388e-fc34-11ea-8a60-471de4f91924 + a96d58aa-fc34-11ea-968a-fb643af1b282 + a96d788a-fc34-11ea-90b6-7fe7ee60c063 + a96d96ee-fc34-11ea-bf23-579b03518232 + a96db688-fc34-11ea-9a90-77d813bdea3b + a96dd762-fc34-11ea-9379-8f322766bd89 + a96df7b0-fc34-11ea-811e-33628901bfb8 + a96e1786-fc34-11ea-8d72-d3ae9cd6c288 + a96e3766-fc34-11ea-8851-2ff8a11412e7 + a96e57f0-fc34-11ea-bee6-ffa57f83c139 + a96e732a-fc34-11ea-9e9b-237c46f9688f + a96e9382-fc34-11ea-96c5-3b8332dce168 + a96eb2b8-fc34-11ea-9e48-df3878fe0fde + a96ed07c-fc34-11ea-98ff-bff73a0039a3 + a96eee68-fc34-11ea-90c7-afb5c5bbcc1c + a96f0ea2-fc34-11ea-ab44-03c5155ddd26 + a96f2d6a-fc34-11ea-bc90-537c2e265c1e + a96f4a8e-fc34-11ea-a029-0f39a503081a + a96f6654-fc34-11ea-8131-67e510381d4d + a96f8580-fc34-11ea-ba1a-7377323c7a71 + a96fa204-fc34-11ea-82fe-87785e14ed4b + a96fbfb4-fc34-11ea-b3c0-c327f4f57c15 + a96fddaa-fc34-11ea-90db-27f64e1437fd + a96fffe2-fc34-11ea-9380-1f85c152a075 + a97022ba-fc34-11ea-92a1-93cb79cd6961 + a97042f4-fc34-11ea-8652-6fe3f5107da9 + a9706298-fc34-11ea-b9b3-9fb4c8e37d06 + a9708124-fc34-11ea-bf1c-dbb52fd50df7 + a970a26c-fc34-11ea-9d4e-ef2dff6b1633 + a970c12a-fc34-11ea-8043-87bc474eaf08 + a970ddf4-fc34-11ea-b10d-5b16d6df85c2 + a970fadc-fc34-11ea-86bd-3f9908d05c20 + a971172e-fc34-11ea-9e6b-6f8b7357b9bc + a97134de-fc34-11ea-b22f-e70842cf6373 + a97151b2-fc34-11ea-89c0-c3cb2d459ef9 + a9716e86-fc34-11ea-8d33-97b477fc817e + a9718a92-fc34-11ea-8c1d-b3b3480c4c79 + a971a90a-fc34-11ea-a280-1bc9de0e15cf + a971c5de-fc34-11ea-952f-aff30f9bd9d5 + a971e2da-fc34-11ea-9e3b-d3dd4918288f + a9720238-fc34-11ea-a9f0-7feec3bc41a7 + a9721f16-fc34-11ea-9ecb-4f0b1f087d47 + a9723bcc-fc34-11ea-b35a-cf151131416e + a9725a4e-fc34-11ea-b5ff-dbec1fecd56b + a97278e4-fc34-11ea-ae2a-1b93c9fef36c + a9729c5c-fc34-11ea-9c08-f734936f944f + a972bbba-fc34-11ea-94f7-97fed22206ea + a972dcee-fc34-11ea-bf8d-f36b7cb3d3f7 + a972fcc4-fc34-11ea-8a8d-1724d38895e6 + a9731dd0-fc34-11ea-82df-47308de0904b + a9733dd8-fc34-11ea-8f48-33e7e8343889 + a9735a8e-fc34-11ea-881a-ef2f239f173c + a97379e2-fc34-11ea-aed4-87c7c29da930 + a973986e-fc34-11ea-8019-3f35abd622f2 + a973b7f4-fc34-11ea-ac3f-f7bb69d6ce80 + a973d4e6-fc34-11ea-b862-7b3fd61cf40f + a973f0b6-fc34-11ea-885c-0b5688641525 + a9740eca-fc34-11ea-b1ef-8b462324d4a4 + a9742d10-fc34-11ea-8b6f-c3e692b77ba8 + a9744c8c-fc34-11ea-a623-bf02b6136880 + a9746bc2-fc34-11ea-bf43-f3adbd9a7c5d + a9748a6c-fc34-11ea-9151-cfd51219041e + a974a880-fc34-11ea-9c0c-1f64a5d894a1 + a974c90a-fc34-11ea-895e-7b9f35da8c78 + a974e9f8-fc34-11ea-92d2-fff6ac1e1562 + a9750794-fc34-11ea-b9a9-6f050eeed55e + a9752972-fc34-11ea-b2b8-7f56931b0566 + a9754e48-fc34-11ea-a2be-b3a0965f0378 + a9756d88-fc34-11ea-a6da-5fe837b1c37f + a9758c5a-fc34-11ea-a871-fbe685ed3688 + a975ac26-fc34-11ea-95d5-73a1540194cc + a975c8b4-fc34-11ea-9071-4b7dc455a4ec + a975e6dc-fc34-11ea-8e06-8b496176c789 + a9760572-fc34-11ea-8989-57fdae61b7c7 + a97624c6-fc34-11ea-993c-17aa9791d0d8 + a976429e-fc34-11ea-ba77-4b43f9d141fa + a9765eb4-fc34-11ea-be0b-cfa4aa17d6f2 + a9767d90-fc34-11ea-b99e-4f75c6ba6d37 + a9769d02-fc34-11ea-a57f-9f31e6ec749e + a976bbe8-fc34-11ea-a3b3-df66791802af + a976daa6-fc34-11ea-9401-efd49e161d77 + a976faf4-fc34-11ea-8b41-1bec406c18ed + a97718d6-fc34-11ea-a8dc-d38e1c7c4b45 + a9773668-fc34-11ea-afd2-cf993618b5bb + a9775468-fc34-11ea-bac1-d3b20747420e + a977aee0-fc34-11ea-adcf-1b5375113675 + a977ced4-fc34-11ea-ace7-6f50f3706f54 + a977efa4-fc34-11ea-bb33-cb78abb1f571 + a9781308-fc34-11ea-8c67-137b41e39e75 + a978331a-fc34-11ea-b720-2b48261eba9f + a97851f6-fc34-11ea-a30c-6b7086d7dcfd + a9787172-fc34-11ea-ae68-a3a55d8754c3 + a97896f2-fc34-11ea-8a1b-67848cdc5e38 + a978b358-fc34-11ea-8b8b-17179c821a82 + a978d1b2-fc34-11ea-9d6e-df83fcd73d5b + a978f002-fc34-11ea-85d9-4f3c6f6ecd01 + a9790de4-fc34-11ea-9853-4bb5a2545eef + a9792b4e-fc34-11ea-8cca-e77b40914416 + a9794bf6-fc34-11ea-bd75-f32c2f4cac6a + a9796c62-fc34-11ea-bdaa-e7f14cb48b5c + a97989b8-fc34-11ea-86b5-df11665d99f6 + a979a894-fc34-11ea-a58e-abe206587131 + a979c7ca-fc34-11ea-85c5-a7be67517f11 + a979e43a-fc34-11ea-9a03-57b9879d1862 + a97a015e-fc34-11ea-b8eb-d34ace57596b + a97a1ed2-fc34-11ea-9afb-2f48734a2d7f + a97a422c-fc34-11ea-89bc-e322390e53d1 + a97a61c6-fc34-11ea-84f6-77af2ff6a041 + a97a869c-fc34-11ea-9930-cbee33ca9444 + a97aa6b8-fc34-11ea-865d-2fb5ac806628 + a97ac71a-fc34-11ea-80b0-8fb153f0250e + a97ae740-fc34-11ea-a6b0-ab36cb92eb60 + a97b0432-fc34-11ea-9622-c33740c25e2f + a97b2200-fc34-11ea-ac70-2f09c04af11a + a97b4168-fc34-11ea-a05f-f7d0b47c49ea + a97b6198-fc34-11ea-a95d-f30307e7795d + a97b8006-fc34-11ea-8015-db0142e6ea6f + a97b9df2-fc34-11ea-b997-97bfee73d107 + a97bbaa8-fc34-11ea-92b0-af403c6af7c2 + a97bd9ca-fc34-11ea-9751-8bfb5feb5a58 + a97bf996-fc34-11ea-9de3-47e1be667bdb + a97c193a-fc34-11ea-a7a4-2ff0fb728a5d + a97c36c2-fc34-11ea-8515-5b1dbd33217b + a97c53dc-fc34-11ea-8525-a3a6eb1a52f8 + a97c6ff2-fc34-11ea-9718-fbbed0da0e10 + a97c8ca8-fc34-11ea-ae43-3f26f853165a + a97ca9a4-fc34-11ea-a08d-cb6933508d66 + a97cc88a-fc34-11ea-9547-47a4b85a6130 + a97cecd4-fc34-11ea-8d0d-eb50db37d232 + a97d0e58-fc34-11ea-8032-072a6546eabf + a97d2d02-fc34-11ea-8af7-e7d53513e6e7 + a97d4a6c-fc34-11ea-bed7-5b5aaf5d0c85 + a97d6862-fc34-11ea-a3de-73c67e426e2b + a97d8658-fc34-11ea-a008-0f1213788f61 + a97da426-fc34-11ea-93df-cf7a4bbba784 + a97dc1e0-fc34-11ea-bb7e-97def7af6b12 + a97dde28-fc34-11ea-be3c-479ffb20d7a9 + a97dfd0e-fc34-11ea-bdff-d7fd3338bfdb + a97e1be0-fc34-11ea-a422-0f4551528002 + a97e3c06-fc34-11ea-9c5b-d7caa75f0197 + a97e586c-fc34-11ea-84c8-c32e957552eb + a97e786a-fc34-11ea-85d5-d72c3ed63f7a + a97e98b8-fc34-11ea-b8ce-0b604beadb5d + a97eb5d2-fc34-11ea-bb4e-a7a40b897c58 + a97ed4cc-fc34-11ea-a3ce-03e91ee28e7f + a97ef4c0-fc34-11ea-9400-a3609e0b9514 + a97f189c-fc34-11ea-9a6d-134d35dd7bb0 + a97f3804-fc34-11ea-b539-e7535fd576b8 + a97f560e-fc34-11ea-a398-677c691e3e5f + a97f760c-fc34-11ea-ac32-c3626b9ec77b + a97f942a-fc34-11ea-b1e0-2b909155c131 + a97fb36a-fc34-11ea-84a5-8fbf0ba3b58d + a97fd5ca-fc34-11ea-a8af-1333713f0381 + a97ff712-fc34-11ea-8247-970c01405f10 + a98014d6-fc34-11ea-9ad7-439abd86aae0 + a980311e-fc34-11ea-b35a-13e449e166a5 + a9804f28-fc34-11ea-877a-f701191fbfac + a9806e5e-fc34-11ea-8190-6bfe3fb48793 + a9808ede-fc34-11ea-84c0-7740f5601756 + a980ad42-fc34-11ea-942e-e7b0503ae9b4 + a980ca48-fc34-11ea-8322-f788020bf13d + a980e9f6-fc34-11ea-bb29-4f90e55b4ca5 + a98105b2-fc34-11ea-8766-7b8d3da349f2 + a98123ee-fc34-11ea-8614-6fd77c76347f + a9814310-fc34-11ea-9210-33eb02b122ce + a98162c8-fc34-11ea-ac1f-c720d2b1c44a + a98182da-fc34-11ea-91aa-bf63fbcd4b06 + a981a1fc-fc34-11ea-8650-6bf1ba2da59d + a981c2ea-fc34-11ea-b0c4-ab1500c67950 + a981e3e2-fc34-11ea-9ddf-df72f958de08 + a98201ec-fc34-11ea-bdbe-77b2896670a5 + a982233e-fc34-11ea-9021-33296781a75e + a98241ca-fc34-11ea-a324-771dafa98ffb + a9825f98-fc34-11ea-9b3c-f32dd2538184 + a9827eb0-fc34-11ea-b8b0-0376745e303b + a9829d6e-fc34-11ea-9f27-f700089da6aa + a982bab0-fc34-11ea-ab35-137808dc6b2e + a982d784-fc34-11ea-9c30-c7fb17df5235 + a982f4bc-fc34-11ea-896a-ffdca9bef5ac + a98312e4-fc34-11ea-80d3-cf9544ca860d + a98330ee-fc34-11ea-9728-830711d4a125 + a9834ee4-fc34-11ea-a426-03977d0de92b + a9836d34-fc34-11ea-9ed3-23a3adaa9c12 + a9838a76-fc34-11ea-97f6-d741de6b0617 + a983a966-fc34-11ea-9393-1f74bb2c9884 + a983c770-fc34-11ea-a15c-8f29f4baf1f1 + a983e340-fc34-11ea-8695-6b674342d984 + a984017c-fc34-11ea-a0be-eb1ceffbdd45 + a9842490-fc34-11ea-b51d-33697327be80 + a98448f8-fc34-11ea-9f71-eb8246ce1475 + a9846888-fc34-11ea-b97c-d7ee5b288899 + a984889a-fc34-11ea-804a-6716525f3c66 + a984a802-fc34-11ea-ad94-17a751e62083 + a984c80a-fc34-11ea-bf5c-e317b11faa86 + a984e510-fc34-11ea-8702-137bc3430b84 + a985068a-fc34-11ea-b01b-672d1ae16e4d + a98523e0-fc34-11ea-bf7b-cf93820c108d + a9854302-fc34-11ea-9ece-235ad62bfa11 + a9855ffe-fc34-11ea-8ff5-471ffbe373b7 + a9857e4e-fc34-11ea-b233-cf6772cfd143 + a9859cf8-fc34-11ea-a075-3f00e2fae58a + a985bd00-fc34-11ea-bd94-5b8824e4fbec + a985da1a-fc34-11ea-aae0-dffcf525988c + a985f78e-fc34-11ea-8fa1-7797ffc0fb1d + a986146c-fc34-11ea-b633-eb841f3263bc + a9863276-fc34-11ea-a8e9-eb30c03c1051 + a9865184-fc34-11ea-9793-87397421f627 + a9867042-fc34-11ea-b493-7bf0a2d002fa + a9868dd4-fc34-11ea-a9e5-13efdb27091a + a986ab5c-fc34-11ea-ae6b-53e020ff101c + a986cae2-fc34-11ea-813b-e7a6393ed00b + a986eab8-fc34-11ea-a3fd-6ffab67c5d2b + a9870e80-fc34-11ea-82e2-531cd27b59a4 + a9872e60-fc34-11ea-bbc4-93c6781eac51 + a9874d78-fc34-11ea-b74e-5764a5632cd9 + a9877172-fc34-11ea-8f6f-d358d7a8d034 + a98791de-fc34-11ea-8554-f748b49870f7 + a987adea-fc34-11ea-8d2b-8fcd98b6b9fc + a987cb0e-fc34-11ea-9f49-bf773d4b6875 + a987ea9e-fc34-11ea-86f3-cb1035101f19 + a98808c6-fc34-11ea-b472-175ccd8c09c5 + a9882cca-fc34-11ea-8e57-f35aafcb1dac + a9884bf6-fc34-11ea-b974-978a5ac7d809 + a98868de-fc34-11ea-832b-c715f113d428 + a9888792-fc34-11ea-9259-cbc00ac9d46d + a988a664-fc34-11ea-881e-df9e132a112c + a988c3ec-fc34-11ea-9e25-338fb8b93228 + a988e214-fc34-11ea-acec-b31a69cfdbac + a989015e-fc34-11ea-8b9b-5bec1d9cd379 + a9891e1e-fc34-11ea-b0b7-7bd30767b735 + a9893cbe-fc34-11ea-bad3-5fed25a3531e + a9895c3a-fc34-11ea-b7db-9702b4364783 + a98980ac-fc34-11ea-8d31-e39f05f477fe + a989a1c2-fc34-11ea-9010-f7470213bb35 + a989c27e-fc34-11ea-98f8-93384eba3112 + a989e36c-fc34-11ea-8c66-5f520b65431b + a98a0298-fc34-11ea-81ec-23aceec7d46c + a98a1ed6-fc34-11ea-a147-b751f846d552 + a98a3c9a-fc34-11ea-abaf-d3e8817b1526 + a98a5c7a-fc34-11ea-8122-2f0bc6d5884b + a98a7a0c-fc34-11ea-a238-3f1061b4d40c + a98a980c-fc34-11ea-a1b9-f3f2a24b6683 + a98ab698-fc34-11ea-8ada-a75ad035305e + a98ad664-fc34-11ea-b28b-17963f3c0ff6 + a98af48c-fc34-11ea-b0d3-772502376c0d + a98b1430-fc34-11ea-8f08-bfd2652d2213 + a98b31a4-fc34-11ea-93b0-8336e2cb7f16 + a98b4ed2-fc34-11ea-ac67-4b570360c32b + a98b6b24-fc34-11ea-ba73-53e993253c58 + a98b9054-fc34-11ea-ab3c-971aab494f42 + a98baeb8-fc34-11ea-aa78-2b509ef2a6f3 + a98bcb96-fc34-11ea-964f-87cc94a69314 + a98beb6c-fc34-11ea-a506-eb63319189b0 + a98c0fde-fc34-11ea-bcf9-eb6ad769cdf5 + a98c3220-fc34-11ea-9fc7-eb8a67b729e4 + a98c503e-fc34-11ea-b0ea-03767121639d + a98c6cf4-fc34-11ea-b279-57c1b256b047 + a98c8f9a-fc34-11ea-8f18-0f0b96779d71 + a98cae76-fc34-11ea-9f91-5360bcd59737 + a98ccc1c-fc34-11ea-874d-675ebd66853c + a98ce972-fc34-11ea-84cb-cbd62269cca5 + a98d08c6-fc34-11ea-9a92-8b8f38297087 + a98d2982-fc34-11ea-8ea3-57f6d112691a + a98d4c78-fc34-11ea-9c91-c78b05cc3407 + a98d6ab4-fc34-11ea-a4a7-7767c201fdc5 + a98d8774-fc34-11ea-8c55-0fec94f6215c + a98da5ec-fc34-11ea-87a8-6b0e4aad71da + a98dc414-fc34-11ea-a0fc-8777ea197363 + a98de110-fc34-11ea-a86c-1f6b10180fe9 + a98dfeb6-fc34-11ea-a944-eb1e7d6fdeb1 + a98e1d06-fc34-11ea-a7d6-6f5069c6688d + a98e3d4a-fc34-11ea-bfe4-6fcc20fa2350 + a98e5b5e-fc34-11ea-80ce-8b875a4c540d + a98e7ce2-fc34-11ea-9fb1-0fde29137eb9 + a98e9cb8-fc34-11ea-baa9-5bed4a3cc21c + a98eb9f0-fc34-11ea-a6d2-4b8c08d10940 + a98ed84a-fc34-11ea-b580-5fd80b28a07a + a98ef7bc-fc34-11ea-b867-cfc374671fd2 + a98f160c-fc34-11ea-8567-1be8a83f3357 + a98f3402-fc34-11ea-8413-a3eae0c38fea + a98f53f6-fc34-11ea-a43a-9fa557b9a01b + a98f73c2-fc34-11ea-9e71-779d50fed69f + a98f930c-fc34-11ea-8426-2759d1ff0c88 + a98fb09e-fc34-11ea-a690-3f60b9daf3d5 + a98fcd4a-fc34-11ea-9854-078363917513 + a98feb54-fc34-11ea-9e08-77d9bb7cb107 + a99008c8-fc34-11ea-856e-cf52adc6ac31 + a990265a-fc34-11ea-af80-479c15c8670b + a9904360-fc34-11ea-9485-5f587e919e4d + a9906264-fc34-11ea-bd54-cb1868612672 + a9908046-fc34-11ea-bbad-8fde4f097666 + a9909e8c-fc34-11ea-bf81-3f7fa1902d51 + a990bab6-fc34-11ea-907a-bf4fc0295a67 + a990d97e-fc34-11ea-9154-af2174885a03 + a990f6f2-fc34-11ea-a30d-237b420cba88 + a9911934-fc34-11ea-8824-f393e3baaa39 + a9913b26-fc34-11ea-b796-53602ce1171f + a9915bc4-fc34-11ea-b9a9-8bfae7f1dc4f + a99180e0-fc34-11ea-9eac-43c192f924e9 + a991a32c-fc34-11ea-85dc-57aec9b5c448 + a991c41a-fc34-11ea-b696-63ad7666ec1e + a991e2a6-fc34-11ea-975b-db518e549ef4 + a991ff7a-fc34-11ea-b8fb-cf89f5dc53f2 + a9921c58-fc34-11ea-8f13-3fa25e5ad4e1 + a9923c42-fc34-11ea-b201-3b54dbc2f699 + a992592a-fc34-11ea-965c-8326fb2ba6a6 + a99276da-fc34-11ea-84f7-e3dd3b52cf7c + a99292fa-fc34-11ea-8396-9378324e2948 + a992b1ea-fc34-11ea-9f5b-afd7e483d5b4 + a992ce5a-fc34-11ea-8e7d-97e1c3239c3a + a992ee4e-fc34-11ea-88e8-a73571951390 + a9930eec-fc34-11ea-9842-f3ff7a4d1c82 + a9932c7e-fc34-11ea-a9aa-2f8892554c08 + a9934ace-fc34-11ea-bec3-d7d6d48d70a7 + a99368ce-fc34-11ea-a42d-076b41ffbd87 + a9938a02-fc34-11ea-bc53-2f21604d1736 + a993a97e-fc34-11ea-8585-3f91efcdb913 + a993c9f4-fc34-11ea-9cdf-2bf0c07b2f71 + a993ee2a-fc34-11ea-89b2-df38dc25f0d0 + a9940cde-fc34-11ea-933f-b740e56ddb06 + a9942c46-fc34-11ea-bfc0-073466224265 + a9944938-fc34-11ea-92fa-4f60b825dc81 + a99466d4-fc34-11ea-9410-ff5a5cb9e719 + a994866e-fc34-11ea-a389-3bc1e16bf9c7 + a994a59a-fc34-11ea-a0c1-735578465930 + a994c5c0-fc34-11ea-a21b-b73876cc8a6c + a994e23a-fc34-11ea-aaae-77da09994c16 + a9950094-fc34-11ea-9aab-471c810282f6 + a9951e08-fc34-11ea-ae6c-5b8cd5e22738 + a9953db6-fc34-11ea-bac9-6bac2f5520b4 + a9955a30-fc34-11ea-8444-bf3ed90521ee + a9957754-fc34-11ea-a7b2-57ce0d5d76a5 + a99593d8-fc34-11ea-a802-07c36f035557 + a995b3ea-fc34-11ea-87cc-735f07c4b7a3 + a995d320-fc34-11ea-9296-4bb213576ecc + a995f210-fc34-11ea-875a-675e4a9438d6 + a99613ee-fc34-11ea-be15-7fe5d7dbf720 + a9963540-fc34-11ea-9253-ab722840b827 + a99654b2-fc34-11ea-bd3d-23b58205f170 + a9967942-fc34-11ea-a96d-4b169590bf5c + a99699e0-fc34-11ea-b753-2f4b3c20d8b8 + a996b8ee-fc34-11ea-b5dc-5f6fafd98a51 + a996d784-fc34-11ea-ab7e-8b1e0139abbc + a996f5de-fc34-11ea-92ee-bb08c6e576db + a997167c-fc34-11ea-942e-c3e12bb45ff5 + a997347c-fc34-11ea-8dcb-7b6f682bfcf8 + a9975416-fc34-11ea-a65e-3f9781befa28 + a9977540-fc34-11ea-b6d2-4b5492531ecd + a997964c-fc34-11ea-8c0a-cb640b53099f + a997ddd2-fc34-11ea-b8d6-bb2f95f4b008 + a99803ca-fc34-11ea-af58-6f7e2499feb1 + a9982508-fc34-11ea-9746-3706a55e367f + a9984d26-fc34-11ea-9bab-bfdb55cdf68e + a99887dc-fc34-11ea-8723-7f638bfaab58 + a998c8be-fc34-11ea-83d2-efa1a26e4719 + a998f9ec-fc34-11ea-983a-fb417cbf6223 + a9991a4e-fc34-11ea-9203-33183aba3444 + a9993876-fc34-11ea-a482-f32171358a57 + a9995ae0-fc34-11ea-9b12-8b27093ff09a + a9997b2e-fc34-11ea-b7ee-db2d74a27ad1 + a9999c12-fc34-11ea-a4c7-d77b141d875a + a999ba3a-fc34-11ea-bfb5-ab1ebbaaa640 + a999d844-fc34-11ea-bb37-b776ef53795c + a999f504-fc34-11ea-be9e-670f85be351f + a99a1598-fc34-11ea-96da-87a12335f00b + a99a3532-fc34-11ea-a68e-eba4f45c659c + a99a574c-fc34-11ea-85c7-2b36b6260b15 + a99a733a-fc34-11ea-aa92-334f620a8d69 + a99a91c6-fc34-11ea-b3de-a7c7aaaa9e32 + a99aaf6c-fc34-11ea-a1f4-fb08cf6de486 + a99acd80-fc34-11ea-affb-5b545cd80a5e + a99aed9c-fc34-11ea-978d-5391b8320a70 + a99b0c78-fc34-11ea-9fa6-431253c1b414 + a99b2b36-fc34-11ea-ab5f-030dcb174f62 + a99b481e-fc34-11ea-8c5b-cf17fd51bc94 + a99b68ee-fc34-11ea-beb2-53a4e39146c9 + a99b86f8-fc34-11ea-b054-db6ca01caa62 + a99ba584-fc34-11ea-8054-ab22d289682a + a99bc4b0-fc34-11ea-82b2-db0c5f92522b + a99be328-fc34-11ea-ab63-8ffeb075c020 + a99c02fe-fc34-11ea-949f-3b05f9adbc09 + a99c21ee-fc34-11ea-aade-771b375fae2c + a99c402a-fc34-11ea-8bf6-770f5d37c448 + a99c5e16-fc34-11ea-ab5c-13f8a848da31 + a99c7a7c-fc34-11ea-9775-779b8dddeb94 + a99c98f4-fc34-11ea-9225-d396bf737406 + a99cb60e-fc34-11ea-b68c-1fb7d4e12a64 + a99cd3e6-fc34-11ea-8bf1-9b2835808740 + a99cf128-fc34-11ea-ab95-ebc998c00f7f + a99d0f3c-fc34-11ea-9f1a-af713edad3b3 + a99d2e2c-fc34-11ea-b3c6-d73dca850abe + a99d4cb8-fc34-11ea-b744-670a8447a828 + a99d6ba8-fc34-11ea-ad21-1fe55954686f + a99d8a16-fc34-11ea-9a5d-8f6b6dd605ab + a99da87a-fc34-11ea-aff0-d7063dfd2119 + a99dcae4-fc34-11ea-9b36-fba7590ae698 + a99ded44-fc34-11ea-8192-0f4941d6a4ff + a99e0c02-fc34-11ea-9ab5-abca8c475f39 + a99e2b56-fc34-11ea-b7f9-37bed8cb15a2 + a99e4a82-fc34-11ea-8b5f-839ef94ba1eb + a99e6a94-fc34-11ea-b2fb-efb7ed0c6c36 + a99e8830-fc34-11ea-8b47-0bc9a8734254 + a99ea5d6-fc34-11ea-b1c0-9347be9ed914 + a99ec3e0-fc34-11ea-a488-3ff501d27473 + a99ee294-fc34-11ea-8e8a-bfdb1b2d3f5c + a99f01a2-fc34-11ea-a22e-f7cb9e698200 + a99f1e4e-fc34-11ea-86a4-3fec9a9db31e + a99f3ba4-fc34-11ea-a266-a3f8cab98459 + a99f5abc-fc34-11ea-a065-479c2affa286 + a99f7768-fc34-11ea-87fd-17be47581331 + a99f957c-fc34-11ea-be71-0b417b8301b2 + a99fb408-fc34-11ea-b21d-7ff8a975d930 + a99fd30c-fc34-11ea-8ff9-c3ce01b245b4 + a99ff094-fc34-11ea-858b-ff2106470a94 + a9a00fc0-fc34-11ea-afa8-63ca46f0f8a8 + a9a02db6-fc34-11ea-855c-d3f8a222f094 + a9a04fc6-fc34-11ea-88ae-33857aa9f977 + a9a071b8-fc34-11ea-aefc-fb8a42c5171e + a9a091d4-fc34-11ea-8acf-5b13515959ba + a9a0b15a-fc34-11ea-b5a5-a37225b2af77 + a9a0d7c0-fc34-11ea-84b9-a74ff4543e9e + a9a0f8d6-fc34-11ea-80a0-fbfd1aed6e31 + a9a116e0-fc34-11ea-8fa8-234fc7542106 + a9a13472-fc34-11ea-8c3b-677de2d4fb72 + a9a15100-fc34-11ea-9fd2-932b3e120a32 + a9a170b8-fc34-11ea-87da-2f4a7e14cfa4 + a9a18fbc-fc34-11ea-a008-8f0c15a36414 + a9a1adc6-fc34-11ea-a70e-2b12754d8f27 + a9a1cad6-fc34-11ea-b1d5-3717f871a343 + a9a1e8cc-fc34-11ea-b937-eb840f6d8555 + a9a207d0-fc34-11ea-9507-b7e25fb2d133 + a9a22558-fc34-11ea-9df3-2f7d58e485e4 + a9a2442a-fc34-11ea-996b-cbcc1ddf7c96 + a9a26338-fc34-11ea-95c9-eb238c017b98 + a9a28322-fc34-11ea-a4d0-17af10b7e3f7 + a9a2a604-fc34-11ea-af7a-271bfa009d03 + a9a2c8d2-fc34-11ea-9052-93eb971dd85a + a9a2e786-fc34-11ea-b850-77745a0b20f4 + a9a307e8-fc34-11ea-94af-03a3594f36db + a9a32700-fc34-11ea-b4ee-e7b8e03543be + a9a347d0-fc34-11ea-90e7-03518c4a94b9 + a9a366e8-fc34-11ea-87f9-3b8cba8277db + a9a386aa-fc34-11ea-9fcd-dbcfbc8803a9 + a9a3a324-fc34-11ea-90a6-432eaf946b2a + a9a3bfee-fc34-11ea-a880-5be9ec292302 + a9a3e316-fc34-11ea-9b24-6b6cb14ccb36 + a9a4038c-fc34-11ea-bd3b-3773ec9e76dc + a9a42088-fc34-11ea-a143-43e878a8d31e + a9a43ea6-fc34-11ea-9a87-bbbc0bf5ef31 + a9a45cd8-fc34-11ea-9150-9fecafb760c9 + a9a479ac-fc34-11ea-be02-7b4d23f03252 + a9a49824-fc34-11ea-bc85-eb6c2e9680bf + a9a4b7d2-fc34-11ea-b0ba-ff5c16217a06 + a9a4d686-fc34-11ea-bb82-db225b17846a + a9a4f288-fc34-11ea-a204-8355e3c3a811 + a9a50fd4-fc34-11ea-98f9-678a90c25ccd + a9a52d52-fc34-11ea-a65d-2f29ff5d1d06 + a9a54db4-fc34-11ea-8e8e-1f7a8c5700bb + a9a56c18-fc34-11ea-a079-0b198e10130d + a9a58b94-fc34-11ea-b3d3-2313e0f3f880 + a9a5af66-fc34-11ea-9593-6716dddce1f9 + a9a5d536-fc34-11ea-86b3-4723c4b43c92 + a9a5f2d2-fc34-11ea-84e5-cbe07595949a + a9a60fd8-fc34-11ea-a427-d3ab2e41ea49 + a9a62e64-fc34-11ea-8c36-43f5bf483e24 + a9a64c96-fc34-11ea-aee0-230c7831e4d8 + a9a66a1e-fc34-11ea-ab78-377833b9e717 + a9a68a6c-fc34-11ea-8d28-8bebf3d09950 + a9a6a74a-fc34-11ea-bd12-e73666e4ae42 + a9a6c626-fc34-11ea-a892-f39cc81c662f + a9a6e412-fc34-11ea-9190-6bacaaefc681 + a9a70366-fc34-11ea-9f0b-6b858e056f1f + a9a721c0-fc34-11ea-9257-2f4468f9f17d + a9a73e6c-fc34-11ea-9037-f701422dcc5d + a9a75de8-fc34-11ea-beac-db6946c5abfb + a9a77a76-fc34-11ea-95b8-d716268bc1bf + a9a79934-fc34-11ea-be21-67128ac9125f + a9a7b61c-fc34-11ea-b894-7792a1577b52 + a9a7d4e4-fc34-11ea-b8b3-b74a1d9f1849 + a9a7f820-fc34-11ea-a9fe-23e235e98086 + a9a81b16-fc34-11ea-95c6-53ec012c9fc9 + a9a83bc8-fc34-11ea-97bf-67d722f7eff6 + a9a85ca2-fc34-11ea-96d9-071bbe51cda3 + a9a8806a-fc34-11ea-be4f-478d40b71022 + a9a89f46-fc34-11ea-a1c6-575681e19db2 + a9a8bcd8-fc34-11ea-933f-bb43f180fdff + a9a8dc9a-fc34-11ea-913e-2fb73d07bd95 + a9a8f860-fc34-11ea-9497-47835a473e77 + a9a915fc-fc34-11ea-91e9-0b7a8d3a1be8 + a9a93528-fc34-11ea-ad7b-67bdd600791b + a9a95620-fc34-11ea-b9ef-bf36abc65796 + a9a97484-fc34-11ea-824c-97aada765346 + a9a9936a-fc34-11ea-ae93-c3850e41d1af + a9a9b016-fc34-11ea-a917-7b481d3d5b85 + a9a9cc4a-fc34-11ea-a159-a7d1dbe6fd2b + a9a9e70c-fc34-11ea-a011-83c0486437ef + a9aa02c8-fc34-11ea-83dc-f36ea19d31a4 + a9aa1dee-fc34-11ea-8271-cb44559013d7 + a9aa3aa4-fc34-11ea-99cc-3bc259bf6383 + a9aa57be-fc34-11ea-98bc-8b111bfa05fc + a9aa78b6-fc34-11ea-8688-97db1adefc92 + a9aa99c2-fc34-11ea-9b41-7786c8ab2388 + a9aab92a-fc34-11ea-ae1d-7f108155ae62 + a9aad720-fc34-11ea-95e8-c79b28830a34 + a9aaf58e-fc34-11ea-8cf5-1339b6de0afd + a9ab1370-fc34-11ea-8f65-eb60058f1a9f + a9ab7a68-fc34-11ea-8fee-dfeb54879c44 + a9ab9b1a-fc34-11ea-9a6d-7fbc7d653f4d + a9abbb72-fc34-11ea-b393-5f720349ba66 + a9abdb0c-fc34-11ea-99be-37b129a07140 + a9abf790-fc34-11ea-b876-1347f20c7979 + a9ac1586-fc34-11ea-a150-2fcbd7fe1fa3 + a9ac3570-fc34-11ea-be73-bfa3e0670308 + a9ac5582-fc34-11ea-aa73-bf453a2a0f7f + a9ac73dc-fc34-11ea-9fd6-3bb72fbfe367 + a9ac966e-fc34-11ea-b874-db5b16f29c15 + a9acb400-fc34-11ea-9b88-0fe623ec06f3 + a9acd3fe-fc34-11ea-bc20-eb917d6788b3 + a9acfbcc-fc34-11ea-820a-439b439d9fd1 + a9ad1ac6-fc34-11ea-88ec-3fbf24ea70eb + a9ad3fce-fc34-11ea-927d-e3346bf0420d + a9ad6300-fc34-11ea-9b0d-cfd56c2daf52 + a9ad833a-fc34-11ea-81e5-13c036b02494 + a9ada8ce-fc34-11ea-963d-3fb47196de6c + a9adc728-fc34-11ea-843b-6f51b1f98b7e + a9ade7da-fc34-11ea-994b-1322c5004f93 + a9ae02e2-fc34-11ea-b021-1f2074564141 + a9ae1cb4-fc34-11ea-93b6-0357b5cacf28 + a9ae3e06-fc34-11ea-b6b3-ab7a4ae50645 + a9ae5864-fc34-11ea-a627-1b195ac1913f + a9ae7a24-fc34-11ea-a87e-07124cffe665 + a9ae946e-fc34-11ea-be82-132a7315a2cb + a9aead28-fc34-11ea-8a67-ff4d66aebf96 + a9aecaba-fc34-11ea-93ac-ab0a29a6b8b8 + a9aee702-fc34-11ea-8390-772890a792ed + a9af0b4c-fc34-11ea-a739-13e30a527d76 + a9af3464-fc34-11ea-80c8-4354dbfa23d5 + a9af5548-fc34-11ea-b1dd-830fb7ccccf1 + a9af767c-fc34-11ea-9536-1f483e64a2c4 + a9afada4-fc34-11ea-acab-3790ed1ced7f + a9afcf46-fc34-11ea-9967-03967781a568 + a9aff8cc-fc34-11ea-9a46-5385feb41478 + a9b01c3a-fc34-11ea-b151-e35c1b2f6f9e + a9b03d78-fc34-11ea-a7f3-cbc3fb59501b + a9b05f2e-fc34-11ea-aa40-8bb37a91cdb9 + a9b080da-fc34-11ea-8320-a784f70c1e7c + a9b0a4a2-fc34-11ea-af26-973053eb35c8 + a9b0c57c-fc34-11ea-8111-b36e3b32849e + a9b0e570-fc34-11ea-9dbe-cbdced92adf2 + a9b103f2-fc34-11ea-ba6d-232655ae9a07 + a9b125ee-fc34-11ea-917b-fb330141dfab + a9b147fe-fc34-11ea-8f6e-d340e5b4f10b + a9b16b1c-fc34-11ea-8310-43c04a439871 + a9b18b92-fc34-11ea-b33a-b7fba114f8b9 + a9b1a9f6-fc34-11ea-8784-131bdd492685 + a9b1cbe8-fc34-11ea-9ed8-777bddc59521 + a9b1ed58-fc34-11ea-8d39-33b8c73eee86 + a9b21026-fc34-11ea-bb39-cb2fa4ee5d1d + a9b23132-fc34-11ea-8ec5-bf871283dca5 + a9b25266-fc34-11ea-8e49-d74cb70afce7 + a9b27386-fc34-11ea-bf97-cb3d98628b74 + a9b29a8c-fc34-11ea-bb6c-ffc97a542ea5 + a9b2c0b6-fc34-11ea-a81c-8b629c619085 + a9b2e2bc-fc34-11ea-95dd-9beafe67e483 + a9b30382-fc34-11ea-8c46-275d16ea60c0 + a9b3229a-fc34-11ea-ad7c-73e1a5ec1c0d + a9b3420c-fc34-11ea-964c-f7a246fc8b55 + a9b361c4-fc34-11ea-bdc4-3b16c4674219 + a9b3833e-fc34-11ea-806e-fba81f182d1f + a9b3a382-fc34-11ea-bffd-7f47ddf13c8f + a9b3c434-fc34-11ea-90c9-4fc7200456ff + a9b3e4d2-fc34-11ea-8dfd-8bfe84238278 + a9b40516-fc34-11ea-b527-275ff9bc13ae + a9b425dc-fc34-11ea-9c31-17d92bf74155 + a9b44684-fc34-11ea-821e-9f9e1b8a1ac6 + a9b467fe-fc34-11ea-b1f6-7f6f68c57a9f + a9b48a72-fc34-11ea-a567-634d0b7773c5 + a9b4b010-fc34-11ea-bd02-87939209ba4f + a9b4d496-fc34-11ea-97b8-ff0279bb84fe + a9b4fb6a-fc34-11ea-87ac-eb3fa520bdbe + a9b51ce4-fc34-11ea-92db-37c210f3c1bd + a9b53fda-fc34-11ea-ad01-bfc88696b184 + a9b56168-fc34-11ea-a371-1bae9afacab1 + a9b58382-fc34-11ea-ad57-9f60236250d1 + a9b5a7c2-fc34-11ea-bcff-13bcc2bb822f + a9b5c9f0-fc34-11ea-a0fe-cfe61dd94221 + a9b5e8f4-fc34-11ea-82ad-dfc1eb27bdad + a9b60a50-fc34-11ea-9df7-77c5391dae21 + a9b6295e-fc34-11ea-8871-478e35b9515c + a9b64808-fc34-11ea-b38d-638aa025e435 + a9b66a04-fc34-11ea-9d14-cfe75f7e93ba + a9b68b42-fc34-11ea-afd2-2391270eecad + a9b6aba4-fc34-11ea-82d2-078277c57b32 + a9b6cbfc-fc34-11ea-be65-ab46da35a655 + a9b6e9c0-fc34-11ea-bbdc-3b9ef710cb4f + a9b709dc-fc34-11ea-bffa-636dac371003 + a9b728c2-fc34-11ea-ac11-5f276d032dfa + a9b74d2a-fc34-11ea-93a7-c749d6b8764c + a9b76f1c-fc34-11ea-b762-0b86b4ae6c55 + a9b79744-fc34-11ea-9415-1bfe850a5bc6 + a9b7bc92-fc34-11ea-b90e-eb7913da3ab9 + a9b7dd8a-fc34-11ea-8c4d-73e961da6bff + a9b7fec8-fc34-11ea-82f5-fbfbb62357b4 + a9b8222c-fc34-11ea-a482-3776c9c9c10c + a9b8423e-fc34-11ea-b8f9-eb403b10554f + a9b86412-fc34-11ea-a7b0-07f861658596 + a9b883b6-fc34-11ea-b95c-6b99014c63e7 + a9b8a2d8-fc34-11ea-b81d-4f65567ab8d5 + a9b8c63c-fc34-11ea-9190-7f022b758777 + a9b8e7b6-fc34-11ea-82c5-276a6768dfb0 + a9b90750-fc34-11ea-9233-370fbe929b6d + a9b92820-fc34-11ea-9b34-cf81e3201f3d + a9b94882-fc34-11ea-b8a6-a7216020d6d5 + a9b967f4-fc34-11ea-9339-87d7f7c6dbec + a9b9870c-fc34-11ea-a06a-cfe1afb4deed + a9b9a886-fc34-11ea-a64d-7fd0458ecb0f + a9b9cabe-fc34-11ea-a953-8708d2bc6972 + a9b9f28c-fc34-11ea-9c60-c36109250ba3 + a9ba1578-fc34-11ea-b041-1f332beb07be + a9ba3666-fc34-11ea-8c89-4bc5ef7e478a + a9ba5858-fc34-11ea-9f85-1b0603e4fbaa + a9ba79c8-fc34-11ea-9118-ff7be346f859 + a9ba9b88-fc34-11ea-9114-4327f8a81749 + a9babba4-fc34-11ea-9d92-5fedef694d0a + a9badcba-fc34-11ea-a01a-8f8866dab2ed + a9bafc40-fc34-11ea-bb51-4fed937525be + a9bb1b08-fc34-11ea-932c-3bc5205e3d9a + a9bb3ca0-fc34-11ea-93f3-23b85f52de6d + a9bb5bae-fc34-11ea-bcdd-0b440dd28489 + a9bb7c74-fc34-11ea-8878-cbbddc332ccc + a9bba046-fc34-11ea-8f79-9bd23463d151 + a9bbc396-fc34-11ea-a0c7-a7759cf347a8 + a9bbe272-fc34-11ea-a85a-07ef6b1254fe + a9bc0388-fc34-11ea-813e-7731124f8617 + a9bc253e-fc34-11ea-9130-53099d5c7a94 + a9bc4582-fc34-11ea-9abb-7bd56cf66cfb + a9bc663e-fc34-11ea-a7f2-3b79404aff03 + a9bc890c-fc34-11ea-8e90-23deb659e756 + a9bcaa22-fc34-11ea-bc1b-b3af2fff1b91 + a9bccdb8-fc34-11ea-b714-1fbcdfb2acfe + a9bcf342-fc34-11ea-b8e9-2bb1f2335d6b + a9bd1282-fc34-11ea-9e66-c74dd5653773 + a9bd3334-fc34-11ea-b397-7f0860add4d8 + a9bd54c2-fc34-11ea-83be-fb9af9aac78b + a9bd78d0-fc34-11ea-9d96-2b1631a1b2f8 + a9bd9bb2-fc34-11ea-884e-9f96c73e6075 + a9bdbd86-fc34-11ea-bb06-ff5cd1f3af17 + a9bddd16-fc34-11ea-b0ba-5b2a64829300 + a9be002a-fc34-11ea-9828-6b4d2b48b5c5 + a9be2000-fc34-11ea-81c6-fbbfe18090f7 + a9be4292-fc34-11ea-8f0b-1b6c83ee8044 + a9be64e8-fc34-11ea-8766-53a30d090694 + a9be85f4-fc34-11ea-9762-47b5ff18c3ea + a9bea7b4-fc34-11ea-8425-a364174f752c + a9becabe-fc34-11ea-b2d7-c7826ebe5f90 + a9beec10-fc34-11ea-98e2-639cc8753c56 + a9bf0c4a-fc34-11ea-ab0a-2f2315b85bc7 + a9bf2d24-fc34-11ea-bbf8-a310802d576d + a9bf4fb6-fc34-11ea-9b93-d33abc183f22 + a9bf6f00-fc34-11ea-bb43-9b0940e57444 + a9bf9142-fc34-11ea-836f-2bba7a00191a + a9bfb2d0-fc34-11ea-95a3-5739744ae61e + a9bfd260-fc34-11ea-8e2d-4badffe36e1e + a9bff326-fc34-11ea-85a5-d729d575fe33 + a9c01aea-fc34-11ea-b69a-032b43a26f6a + a9c03a02-fc34-11ea-8df8-0744e01ccfff + a9c05c76-fc34-11ea-9456-4390b348b4ca + a9c07df0-fc34-11ea-ad97-af06d4d6130e + a9c09d62-fc34-11ea-9915-e3a203c01b24 + a9c0bff4-fc34-11ea-ba04-772d5dc1ff34 + a9c0e04c-fc34-11ea-8064-bfd3601be41f + a9c10112-fc34-11ea-a510-c702cc3356b2 + a9c12804-fc34-11ea-8a6c-777f0a88612e + a9c14ab4-fc34-11ea-8ebd-b34439cc6a6d + a9c16d82-fc34-11ea-92bd-832f43c692f2 + a9c190f0-fc34-11ea-9c20-27657ce646b6 + a9c1b8a0-fc34-11ea-aee0-e3eab56556a1 + a9c1dbf0-fc34-11ea-8324-93a72a0f94d6 + a9c1fd38-fc34-11ea-8378-1374dfe4dfc3 + a9c21dcc-fc34-11ea-9af5-2b356cd0acb5 + a9c23fa0-fc34-11ea-a4eb-afa1526832b8 + a9c264da-fc34-11ea-9d1b-fbbea678fd9d + a9c284e2-fc34-11ea-94bb-3bcb4f94a8a6 + a9c2a6ac-fc34-11ea-8e01-83fcc298ea79 + a9c2c736-fc34-11ea-aaaf-7f4b6d51002d + a9c2e8b0-fc34-11ea-85e5-27215979fdc1 + a9c30778-fc34-11ea-b7f9-6b14d047c8b9 + a9c3274e-fc34-11ea-99a3-5fad7c6141b9 + a9c348a0-fc34-11ea-ac13-cb84b5252287 + a9c36916-fc34-11ea-814d-c796f3abbb79 + a9c38dc4-fc34-11ea-84c8-b7fd3c35dab0 + a9c3b0ec-fc34-11ea-8325-13c134bac6ee + a9c3d194-fc34-11ea-a9b6-73bacd2a0088 + a9c3f232-fc34-11ea-aa81-3bf0dc11bf0f + a9c4135c-fc34-11ea-aa97-5797d5e963d0 + a9c43b66-fc34-11ea-8b64-375dc9b23d50 + a9c45df8-fc34-11ea-bde0-6ff63d6b46f3 + a9c47ec8-fc34-11ea-9ac1-6ba72ee80c2b + a9c4a09c-fc34-11ea-820e-6b51cb134f3a + a9c4c144-fc34-11ea-85e5-c732b3257e50 + a9c4e1ce-fc34-11ea-b312-73a28ced8e2f + a9c502d0-fc34-11ea-9d1c-a77d0cdee466 + a9c521e8-fc34-11ea-a318-cbbceac0fc4e + a9c544fc-fc34-11ea-ae8a-6709d50db534 + a9c567b6-fc34-11ea-8488-b756577228f0 + a9c58a5c-fc34-11ea-9e7d-2722068b6eb4 + a9c5ae2e-fc34-11ea-8c01-5331d9b422f5 + a9c5cee0-fc34-11ea-a3b2-23a80cebe2a3 + a9c5edbc-fc34-11ea-bf10-2f622ed9ef7e + a9c61044-fc34-11ea-b9f4-17ef37be8dd9 + a9c63088-fc34-11ea-905d-4308a608317b + a9c655b8-fc34-11ea-aee3-afc2e73e9d91 + a9c677aa-fc34-11ea-94aa-23e6958fb1d2 + a9c6994c-fc34-11ea-8cee-7b04c26649cd + a9c6c322-fc34-11ea-9525-7342d21706b4 + a9c6e622-fc34-11ea-b419-472453ad6520 + a9c70738-fc34-11ea-b498-f734c74561c0 + a9c72a9c-fc34-11ea-b91f-a7cebe6beaa6 + a9c74bda-fc34-11ea-9e3c-776dc9f2023f + a9c76b38-fc34-11ea-91e2-8b18d979f5a0 + a9c78a8c-fc34-11ea-b93d-e31acf0bc84b + a9c7a9cc-fc34-11ea-82cf-6734c7c0f0ae + a9c7cfc4-fc34-11ea-a4be-03ca0e4accec + a9c7f2c4-fc34-11ea-970d-13ea116b3d47 + a9c81682-fc34-11ea-b1f3-0fc02352016e + a9c84080-fc34-11ea-b983-436963814c8c + a9c864a2-fc34-11ea-a58c-03bde6e82682 + a9c885ea-fc34-11ea-958f-1bb759918581 + a9c8ace6-fc34-11ea-bd1a-83ac7574c0f8 + a9c8d11c-fc34-11ea-a659-6304d79911c6 + a9c951d2-fc34-11ea-845a-87b1ab764149 + a9c978e2-fc34-11ea-8228-aba60ecb9a8f + a9c99c5a-fc34-11ea-8614-637d70528aa8 + a9c9bcee-fc34-11ea-9182-27d3f08cb1d2 + a9c9dd96-fc34-11ea-9eff-af337f4035a0 + a9c9ffb0-fc34-11ea-a02c-03b8c159447f + a9ca1ec8-fc34-11ea-b29a-13421c992519 + a9ca4092-fc34-11ea-95eb-0fe527bfe43a + a9ca6054-fc34-11ea-8a38-3f513eae0445 + a9ca7e90-fc34-11ea-bf23-c31493176428 + a9caa028-fc34-11ea-bf2b-fb8f8f6a897c + a9cac26a-fc34-11ea-85d0-27b0f90f8c96 + a9cae376-fc34-11ea-b800-3b3320681cee + a9cb02de-fc34-11ea-9437-cfde9662870a + a9cb246c-fc34-11ea-af7b-7377c59563ff + a9cb44c4-fc34-11ea-918a-771638e80b05 + a9cb64fe-fc34-11ea-964e-5353dd46fb57 + a9cb8bdc-fc34-11ea-a171-8bf13d8e4253 + a9cbae96-fc34-11ea-a01c-0b39147504c0 + a9cbd7a4-fc34-11ea-ac77-a769377af502 + a9cbfc7a-fc34-11ea-9315-2be2099e8b7f + a9cc2592-fc34-11ea-a221-87256bdf9519 + a9cc4a22-fc34-11ea-ba5c-279c51073c8b + a9cc6e58-fc34-11ea-9a28-db8234e2c1dd + a9cc9040-fc34-11ea-a47a-d7c21db1f209 + a9ccb4b2-fc34-11ea-8e0f-1fb813172460 + a9ccd67c-fc34-11ea-a1df-43438fac2a71 + a9ccf85a-fc34-11ea-a381-239396a390ca + a9cd19fc-fc34-11ea-9a38-7b57866cc011 + a9cd3d38-fc34-11ea-a7f6-e7c45e9c63f8 + a9cd6024-fc34-11ea-bc3e-47c8f3bb264f + a9cd85b8-fc34-11ea-b482-3f9b4fca48d9 + a9cdad2c-fc34-11ea-a36e-07d5e3a03121 + a9cdcf64-fc34-11ea-b1ce-dff5bceec689 + a9cdf138-fc34-11ea-b47a-73bf7faf5659 + a9ce1636-fc34-11ea-9ea3-93f007e4e4c9 + a9ce3ab2-fc34-11ea-abf0-63d1d1473100 + a9ce623a-fc34-11ea-841f-57d07ee3f81c + a9ce836e-fc34-11ea-8373-7b1076a69496 + a9cea7f4-fc34-11ea-8d30-3b75159ef86d + a9cecca2-fc34-11ea-beed-07bab42aa340 + a9cee80e-fc34-11ea-94e0-7f4bcd3c57af + a9cf03e8-fc34-11ea-ba3e-d76ea14ba230 + a9cf1f54-fc34-11ea-a2cc-377334480ce8 + a9cf3d9a-fc34-11ea-98c4-3327cc6b39cc + a9cf5fc8-fc34-11ea-a4f1-5b510e449edc + a9cf7c4c-fc34-11ea-b108-47e87ef39b73 + a9cfa064-fc34-11ea-ad3b-d77ffa0e5639 + a9cfbb76-fc34-11ea-98b4-c390daac996f + a9cfdbe2-fc34-11ea-9d5f-974fcff8fbaa + a9cffce4-fc34-11ea-9f39-d37c439f3260 + a9d01ecc-fc34-11ea-864e-2f6e1cf394ee + a9d03fd8-fc34-11ea-bbe8-c7ed7f6300e7 + a9d0612a-fc34-11ea-a9de-2bce87e31e5d + a9d08ae2-fc34-11ea-9531-db0ca0125519 + a9d0adba-fc34-11ea-bc8e-6f3f25527678 + a9d0cda4-fc34-11ea-a70e-2b4ef624b076 + a9d0f59a-fc34-11ea-8350-0f0dba8764ad + a9d11732-fc34-11ea-a13b-0f17b666bbf6 + a9d14004-fc34-11ea-80e3-ef3b98e30121 + a9d160f2-fc34-11ea-bb08-eb0a4cabe5e1 + a9d182c6-fc34-11ea-bf36-8ff9a9442fc2 + a9d1a184-fc34-11ea-8bc7-bbffddc6d672 + a9d1bf7a-fc34-11ea-a92d-47018af4087c + a9d1dd2a-fc34-11ea-b0fc-074bb5587840 + a9d1fa26-fc34-11ea-931c-bf1ce7950a81 + a9d214de-fc34-11ea-99db-b7c147172101 + a9d236d0-fc34-11ea-9dd3-6b6c41f597e0 + a9d257fa-fc34-11ea-a49b-f78dcbd3c288 + a9d27794-fc34-11ea-8f6f-ef9649945941 + a9d29436-fc34-11ea-b627-4f7ef174eb1f + a9d2b236-fc34-11ea-927d-07455ab5753d + a9d2d2d4-fc34-11ea-92c9-c3f47c850462 + a9d2f552-fc34-11ea-837e-2b43cf41cea4 + a9d31b0e-fc34-11ea-ac0c-0388d62cfc85 + a9d33b2a-fc34-11ea-b340-3f2f06b2c7fe + a9d35f06-fc34-11ea-ba28-fb8ab0f2cfee + a9d38666-fc34-11ea-a37f-93d45b432ad1 + a9d3a81c-fc34-11ea-8f4e-dba9b02de6e3 + a9d3cad6-fc34-11ea-bd90-7bbddf13a707 + a9d3ede0-fc34-11ea-a736-1f331c3289f4 + a9d40fa0-fc34-11ea-8731-37aba7e34902 + a9d42fc6-fc34-11ea-b4a9-579e0581ef2e + a9d451fe-fc34-11ea-aa4e-470ed6185b25 + a9d46f86-fc34-11ea-8c32-8fe9cecd076c + a9d48cf0-fc34-11ea-970b-a7ce25885249 + a9d4ad70-fc34-11ea-8e8c-a36f1ad7b837 + a9d4cd82-fc34-11ea-8ee0-df8b4e4e43e8 + a9d4edee-fc34-11ea-b5e2-2773f0b787f5 + a9d50dc4-fc34-11ea-8f04-ebd8b1b79129 + a9d52c5a-fc34-11ea-af01-c748eca409d1 + a9d54dde-fc34-11ea-a5dc-2fd9e1b9a16e + a9d56d3c-fc34-11ea-8129-e3d681d7ff78 + a9d598fc-fc34-11ea-923f-175619a68894 + a9d5bda0-fc34-11ea-92b8-fb7f557775d1 + a9d5e1a4-fc34-11ea-a040-bfadf630839d + a9d60788-fc34-11ea-bbae-1be1099b9326 + a9d6270e-fc34-11ea-8075-c7b05b17d558 + a9d644fa-fc34-11ea-b35a-0f096be4a73a + a9d663f4-fc34-11ea-ba81-274e9ee57738 + a9d68686-fc34-11ea-aabd-af1e432ed7b8 + a9d6a7f6-fc34-11ea-adca-1b75d30c7b38 + a9d6c61e-fc34-11ea-92e5-5fba6f6af894 + a9d6e342-fc34-11ea-be04-2f7d7fa128bc + a9d701ce-fc34-11ea-a753-eb7c7cbb054e + a9d7215e-fc34-11ea-aa49-97947d112a62 + a9d741f2-fc34-11ea-b7ca-cf555a9f95e5 + a9d7675e-fc34-11ea-9132-23d1fdd2bf76 + a9d7857c-fc34-11ea-adb2-9386efdc7239 + a9d7a3d6-fc34-11ea-968b-27c4788c07cb + a9d7c41a-fc34-11ea-99b7-1329b0c6d1ea + a9d7e134-fc34-11ea-8e3a-f32288c1ada6 + a9d7fee4-fc34-11ea-bcb0-c382929ab965 + a9d821a8-fc34-11ea-9cd7-8bc879b30660 + a9d84840-fc34-11ea-8b63-9f6609e870a0 + a9d86e9c-fc34-11ea-8691-57203431a64c + a9d88d5a-fc34-11ea-b124-1322f342a467 + a9d8ab64-fc34-11ea-abbf-3bf13b666b16 + a9d8d102-fc34-11ea-aad8-231975c06d09 + a9d8f2e0-fc34-11ea-92da-a72e17cd4f9c + a9d9136a-fc34-11ea-9f17-cfff385ed6cf + a9d9325a-fc34-11ea-8208-ef26cb38ab7b + a9d95154-fc34-11ea-96b1-bf860bb2cae3 + a9d97184-fc34-11ea-ac22-27c2491f26f9 + a9d9909c-fc34-11ea-b693-bf2c321f2ed1 + a9d9afbe-fc34-11ea-9247-1ba1ad5abb9c + a9d9cfbc-fc34-11ea-8742-6762bc587d4a + a9d9f082-fc34-11ea-85c4-7fe65fb49399 + a9da0ee6-fc34-11ea-936b-7fed9201288f + a9da3290-fc34-11ea-9338-a709e8a54906 + a9da52e8-fc34-11ea-92f6-1bff69ca5769 + a9da77b4-fc34-11ea-ae2b-bb4efe286b25 + a9da99b0-fc34-11ea-a256-ef5a14629a59 + a9daba8a-fc34-11ea-8533-3f8ec0079c5e + a9dadab0-fc34-11ea-aca2-c76ee38b60b6 + a9daf98c-fc34-11ea-8a37-b741efd9aa2d + a9db1a84-fc34-11ea-b04f-2329a77f7651 + a9db3cbc-fc34-11ea-8ce2-e389f52fea30 + a9db6430-fc34-11ea-8c33-2bed94b04b63 + a9db8c76-fc34-11ea-8308-7360bc4c6575 + a9dbb1ec-fc34-11ea-a5c1-271dc9c0ed32 + a9dbd1ae-fc34-11ea-91a9-038b75c5bc3f + a9dbf72e-fc34-11ea-9e07-737ba04bd0f3 + a9dc18c6-fc34-11ea-a456-fb17add8a09c + a9dc3a7c-fc34-11ea-8ece-bb511d02393a + a9dc5b4c-fc34-11ea-882c-7f1633e17a09 + a9dc7c94-fc34-11ea-ab30-f37a73883188 + a9dca034-fc34-11ea-867b-db8d3bf51a68 + a9dcc096-fc34-11ea-97f4-735b25ebe3f9 + a9dce68e-fc34-11ea-ad42-e33039ebacba + a9dd0740-fc34-11ea-a80e-53da66cc6211 + a9dd26c6-fc34-11ea-b5c7-bfcf4787e7c9 + a9dd45a2-fc34-11ea-8d49-93ec28560e72 + a9dd6820-fc34-11ea-924a-83fefaa16e8c + a9dd89c2-fc34-11ea-9746-63c111592262 + a9ddaa56-fc34-11ea-ba2e-1b29195f7774 + a9ddd06c-fc34-11ea-a8c9-fb252f9e437a + a9ddf3f8-fc34-11ea-8845-eb0e9ef43f4a + a9de16d0-fc34-11ea-8c5d-db6c55b79ac8 + a9de3cfa-fc34-11ea-99c0-2b3a39892457 + a9de5f8c-fc34-11ea-908d-eb7dbcec69b8 + a9de7fe4-fc34-11ea-9f4d-ff01e9671035 + a9dea212-fc34-11ea-b900-939b9c8296f0 + a9dec10c-fc34-11ea-b4b2-535c75a516f3 + a9dee056-fc34-11ea-a694-938c46a1e6c3 + a9defdca-fc34-11ea-b4fb-7b5d148969bb + a9df1b20-fc34-11ea-ac83-6f575cd47de7 + a9df4136-fc34-11ea-92c9-b3eb0edc5f5c + a9df627e-fc34-11ea-99ea-cf9d4b32ee3b + a9df824a-fc34-11ea-a3e2-8f9d95a48591 + a9dfa7b6-fc34-11ea-a18a-f7c50c9bec92 + a9dfcde0-fc34-11ea-8ef5-cf501dd993d9 + a9dff9d2-fc34-11ea-9c4b-539135cf591b + a9e01f2a-fc34-11ea-ba53-1348f4006018 + a9e04202-fc34-11ea-b4cf-d76773cc94d2 + a9e068a4-fc34-11ea-877a-9fac6a0728de + a9e08a6e-fc34-11ea-899f-9b9d0bd03dc0 + a9e0b156-fc34-11ea-9beb-4b9413577fa8 + a9e0d58c-fc34-11ea-b76b-1719b3a5c4df + a9e0f6e8-fc34-11ea-8602-67caba330fc2 + a9e11862-fc34-11ea-b180-33c3f5f39783 + a9e13928-fc34-11ea-87ed-1b2f65ad117b + a9e15b56-fc34-11ea-8cf1-93069f5d6cb0 + a9e18252-fc34-11ea-aa72-931ab4707b5e + a9e1b25e-fc34-11ea-aa07-8fa8d8731fc4 + a9e1d34c-fc34-11ea-90aa-43145deec41c + a9e1f19c-fc34-11ea-ad57-abca3b3a4442 + a9e21712-fc34-11ea-a0d3-a30eadd7e88d + a9e23f30-fc34-11ea-96ec-337b7cc57a0b + a9e26802-fc34-11ea-821e-83f367114d30 + a9e288fa-fc34-11ea-b517-bf62fdd69383 + a9e2ac86-fc34-11ea-a6bc-8badb7ac6197 + a9e2d404-fc34-11ea-ab98-7b088fc82d33 + a9e2f65a-fc34-11ea-9e6e-bff913d8d588 + a9e3159a-fc34-11ea-bbb4-3f4ce26e09dd + a9e33926-fc34-11ea-aaec-1b4eadb55482 + a9e358ac-fc34-11ea-92bb-6346bd78d95b + a9e37f9e-fc34-11ea-b3c5-3b696939a915 + a9e3a622-fc34-11ea-b463-5bf8b1b0638f + a9e3c6e8-fc34-11ea-a908-db5f229874cd + a9e3ed3a-fc34-11ea-95b4-d74e8a583c0e + a9e40fb8-fc34-11ea-a4dd-67c88288e9eb + a9e42fde-fc34-11ea-ad34-0385d3bcd4da + a9e44fa0-fc34-11ea-8562-5729637c8eef + a9e4707a-fc34-11ea-a7d4-17f2495aab4a + a9e49668-fc34-11ea-a8f6-b33ba862e166 + a9e4bcf6-fc34-11ea-9bd2-b740062336ae + a9e4e276-fc34-11ea-b303-83e0f2aee6fe + a9e5054e-fc34-11ea-83f0-572f907fbd46 + a9e52cc2-fc34-11ea-9cdc-ab5d9e83db36 + a9e5501c-fc34-11ea-b0c9-c7585e3b168d + a9e572c2-fc34-11ea-8b5f-afd4d373ae38 + a9e59a4a-fc34-11ea-b54f-ff713c19ec26 + a9e5bf0c-fc34-11ea-a46e-2bd754839742 + a9e5e234-fc34-11ea-832b-43a05a045d90 + a9e6021e-fc34-11ea-90c2-df3d9a822fc5 + a9e6228a-fc34-11ea-afc4-231e37ebb38a + a9e64b52-fc34-11ea-bfe3-2bf4a3b61a39 + a9e66b0a-fc34-11ea-b14f-c7a66b243d68 + a9e68a22-fc34-11ea-95c7-0b8879ae228f + a9e6a886-fc34-11ea-9e90-2b417c69ebbe + a9e6c712-fc34-11ea-b5ec-ab168c35410b + a9e6e5ee-fc34-11ea-9c0b-b37d52e9dd22 + a9e705e2-fc34-11ea-97a5-f79db51081af + a9e724aa-fc34-11ea-8fc1-d76522144069 + a9e748ae-fc34-11ea-a77e-af7afd2b616f + a9e766d6-fc34-11ea-9874-d30c04910dd6 + a9e78aa8-fc34-11ea-8a12-3337852e903a + a9e7aa06-fc34-11ea-93f7-e353c6cc0122 + a9e7cbe4-fc34-11ea-849a-b3a88be9b46c + a9e7f150-fc34-11ea-90ef-7f6c7bf65771 + a9e81176-fc34-11ea-97b4-c7162dff9a73 + a9e83020-fc34-11ea-b61e-6b8f661feccc + a9e851f4-fc34-11ea-a157-7bcc840b8040 + a9e874c2-fc34-11ea-afb9-333e2de46d4a + a9e8943e-fc34-11ea-9244-3b44e5857215 + a9e8b306-fc34-11ea-81e7-7fd1343e7e8f + a9e8d0c0-fc34-11ea-9cbb-db6298ab25e8 + a9e8f0b4-fc34-11ea-abfb-7f771dec9634 + a9e9101c-fc34-11ea-a150-238a6211b56f + a9e93182-fc34-11ea-8e9c-c3e04dde0dbf + a9e95234-fc34-11ea-b246-0bd91251ddb3 + a9e97408-fc34-11ea-8424-0bcc5365d3f5 + a9e993d4-fc34-11ea-8a53-dfad4c115d37 + a9e9b332-fc34-11ea-90f6-a70c86d504fd + a9e9d0ba-fc34-11ea-ad52-075ceba73468 + a9e9f112-fc34-11ea-8a36-7fbc998b7bf0 + a9ea14a8-fc34-11ea-abbb-2f3c5f63d731 + a9ea3b54-fc34-11ea-b7d9-777ae41b8e5b + a9ea5b8e-fc34-11ea-99ff-67f7bf5a62a9 + a9ea7f06-fc34-11ea-88eb-a764c20e4d60 + a9eaa4a4-fc34-11ea-a155-5ba4acdc481b + a9eac72c-fc34-11ea-b952-9bb7c984d3cd + a9eae824-fc34-11ea-8662-7b827881654d + a9eb08b8-fc34-11ea-a822-1f0ffb6d7d10 + a9eb2992-fc34-11ea-a995-83818aaa1439 + a9eb490e-fc34-11ea-8cb2-83816d724055 + a9eb674a-fc34-11ea-a61d-f7fbf5bcb9b4 + a9eb878e-fc34-11ea-9052-7b3cebd17d9c + a9eba53e-fc34-11ea-add3-0bec580fac63 + a9ebc5f0-fc34-11ea-8911-17cf69e14e4f + a9ebe63e-fc34-11ea-ab9b-cb38978b2949 + a9ec0808-fc34-11ea-8610-dfacdb9bf429 + a9ec281a-fc34-11ea-89cb-2bd8ecac95f5 + a9ec4692-fc34-11ea-9a43-e356c9599d2f + a9ec6546-fc34-11ea-aa67-9bec66812ef3 + a9ec8382-fc34-11ea-b74a-57ffd8680e17 + a9ecbff0-fc34-11ea-be35-0b1b2e06bc4e + a9ece0a2-fc34-11ea-8b92-cfb7241c69e1 + a9ed008c-fc34-11ea-b4a1-27da82278a99 + a9ed2210-fc34-11ea-94fb-93cbf841828b + a9ed431c-fc34-11ea-8265-83e3dd952f5e + a9ed625c-fc34-11ea-b57e-eb06fb93f4bd + a9ed7f4e-fc34-11ea-b479-5b814b8995cc + a9ed9dee-fc34-11ea-90d3-4fe5f9cf33ad + a9edbe28-fc34-11ea-a5fc-3f985958f9fc + a9eddda4-fc34-11ea-8fcc-277ad17add7f + a9edfb7c-fc34-11ea-a49c-93d4e74bba77 + a9ee1c88-fc34-11ea-b298-17f831ceb773 + a9ee3f7e-fc34-11ea-8be2-236e076bdf65 + a9ee5de2-fc34-11ea-a2d9-978ae380e6f5 + a9ee7f98-fc34-11ea-804b-0798bdbbb903 + a9eea2a2-fc34-11ea-96c0-376583cd9f5a + a9eec264-fc34-11ea-831c-0fb20de70fa6 + a9eee460-fc34-11ea-807f-6f42eda5c83a + a9ef0a80-fc34-11ea-997c-4b6ae4c26351 + a9ef2c4a-fc34-11ea-997c-afe586f04ddd + a9ef4c02-fc34-11ea-b9e2-0b8be4857b2a + a9ef7254-fc34-11ea-b38f-cba81d1458fb + a9ef95b8-fc34-11ea-98b4-d7f3446a0adf + a9efb980-fc34-11ea-bb3b-fba5c98da470 + a9efd8c0-fc34-11ea-85e7-3baa3be80280 + a9eff878-fc34-11ea-b90f-4f9f0b853698 + a9f0177c-fc34-11ea-b459-23962f60da34 + a9f03446-fc34-11ea-b3ed-fb133ea9fdb2 + a9f055a2-fc34-11ea-9064-af315a828f19 + a9f075fa-fc34-11ea-9b1b-4bac408ff7ad + a9f0967a-fc34-11ea-8c10-bba318fc1dbd + a9f0b4d4-fc34-11ea-b5d8-d7978ae7e185 + a9f0d4b4-fc34-11ea-a778-1fc5d7f9ac7b + a9f0f3ea-fc34-11ea-8e95-87fc8d21b6dd + a9f11302-fc34-11ea-8f6e-4b43b0d1b0ca + a9f13184-fc34-11ea-b702-2f3d0841aae3 + a9f14f66-fc34-11ea-9c0a-7b658a3ca1e1 + a9f17112-fc34-11ea-9eb8-43b71cd707b5 + a9f19214-fc34-11ea-9db1-2b62d495a3e0 + a9f1b37a-fc34-11ea-9171-ebaa7c14c361 + a9f1d558-fc34-11ea-ba97-670f9c7a39a3 + a9f1fb96-fc34-11ea-84f4-bfe6a2b495dc + a9f21f22-fc34-11ea-986e-8f79cf46ca85 + a9f24128-fc34-11ea-bd55-4b53aea99799 + a9f2636a-fc34-11ea-9fbc-1f022eeb2eef + a9f2843a-fc34-11ea-915b-ab268ff51a41 + a9f2a33e-fc34-11ea-8b6a-87fb8bc3d4af + a9f2c36e-fc34-11ea-a059-ff5bb26f6171 + a9f2e2e0-fc34-11ea-989c-3b27c8651d3b + a9f30356-fc34-11ea-8a9b-e747fa6a33a0 + a9f32d22-fc34-11ea-90df-6786806027ff + a9f34bae-fc34-11ea-9c62-679273dfcdf6 + a9f36ba2-fc34-11ea-8276-47f95f400bd8 + a9f38d8a-fc34-11ea-bf47-27eafdc73ed3 + a9f3ad42-fc34-11ea-862a-3f7192ffe321 + a9f3d254-fc34-11ea-bde9-f7a6ddee7434 + a9f3ff90-fc34-11ea-94cc-bb6d0c305750 + a9f426dc-fc34-11ea-9ae4-13526253d4d7 + a9f488d4-fc34-11ea-b01e-07a16d15d14d + a9f4c65a-fc34-11ea-9b67-ffa24ece3b0f + a9f4ec7a-fc34-11ea-8e30-330c57e602f7 + a9f50c82-fc34-11ea-9a0e-0324d1400efe + a9f52b90-fc34-11ea-9b22-77f33119e413 + a9f549fe-fc34-11ea-a0a7-47a7bd2143fc + a9f56b8c-fc34-11ea-8f5b-a379806168cc + a9f58c48-fc34-11ea-804c-f71a1fc902d9 + a9f5ae9e-fc34-11ea-b8a3-d32f34612110 + a9f5cf8c-fc34-11ea-8015-376068aea094 + a9f5ef58-fc34-11ea-a1e8-efd6bdb70245 + a9f60ea2-fc34-11ea-abbb-df1148da85bf + a9f62fea-fc34-11ea-a522-db28d69995f3 + a9f64f7a-fc34-11ea-8e1b-337e6908e5e0 + a9f67158-fc34-11ea-9af6-5b1f44ce20d4 + a9f6976e-fc34-11ea-a010-fbb04b9b425f + a9f6b7c6-fc34-11ea-991a-1f912a5b96d1 + a9f6d97c-fc34-11ea-aa55-cbf68e03f66e + a9f6fc18-fc34-11ea-a4ed-97924e1d70ad + a9f71dc4-fc34-11ea-847b-9b3c1cf9b3b6 + a9f7409c-fc34-11ea-b5cb-dfca19a6b85f + a9f76388-fc34-11ea-99e7-5f2cf78d18be + a9f78458-fc34-11ea-ae43-a75a780a31cc + a9f7a4e2-fc34-11ea-8523-5f687116a8dc + a9f7c45e-fc34-11ea-b95d-db9e396f191f + a9f7e3bc-fc34-11ea-ba40-0bfd4bcc99a9 + a9f80590-fc34-11ea-88aa-5fc0fa0022ef + a9f82688-fc34-11ea-bd79-b318a445aa96 + a9f844a6-fc34-11ea-bb17-2bd754647df1 + a9f86404-fc34-11ea-9d41-bf6d68f06620 + a9f883c6-fc34-11ea-941b-73a5792ad79f + a9f8a554-fc34-11ea-8a22-c3c5a71b2eba + a9f8c3d6-fc34-11ea-8a1b-5b5283974e60 + a9f8e2a8-fc34-11ea-a664-67432d63b58e + a9f90300-fc34-11ea-9ae6-1f4963cfa83b + a9f92286-fc34-11ea-a88e-73d5f3243676 + a9f94608-fc34-11ea-994a-4b060e30e111 + a9f967dc-fc34-11ea-81cc-63849926997b + a9f98870-fc34-11ea-a5ee-e7d37bfc3950 + a9f9aabc-fc34-11ea-90c1-13dcc05e55d2 + a9f9ca38-fc34-11ea-b66f-03569dc6a1a6 + a9f9ed88-fc34-11ea-ac33-1bb362f68026 + a9fa0f0c-fc34-11ea-a5b5-17a4ae6b731c + a9fa2d2a-fc34-11ea-b6d7-f7bfd4ff0061 + a9fa4bac-fc34-11ea-b5b8-efbd03074774 + a9fa6ccc-fc34-11ea-b9e3-e35821459af1 + a9fa8cfc-fc34-11ea-af2e-e7d25325ab82 + a9faad36-fc34-11ea-b27d-e3349bab319f + a9faccda-fc34-11ea-be72-0f4f163a61da + a9faec38-fc34-11ea-a7b5-53d6a0f7c834 + a9fb0c18-fc34-11ea-88d8-4fc2dee0b2ce + a9fb2b30-fc34-11ea-a594-5b4a1fcacf41 + a9fb4a02-fc34-11ea-8a1f-1bc893b85ecc + a9fb69ce-fc34-11ea-9768-a772fded442b + a9fb8918-fc34-11ea-bf15-8754896d9912 + a9fba7fe-fc34-11ea-8473-37b20794ad3d + a9fbc5fe-fc34-11ea-a809-97db6feec84c + a9fbe624-fc34-11ea-9f84-87c2487c3fb3 + a9fc04a6-fc34-11ea-8a9d-5b6196b94a07 + a9fc2be8-fc34-11ea-ad7e-174e806fb387 + a9fc501e-fc34-11ea-aefa-c7ce02c0b946 + a9fc70a8-fc34-11ea-b05d-b3d69cabb76f + a9fc924a-fc34-11ea-a421-bf9281d1706e + a9fcb1c6-fc34-11ea-9ce8-2345ae734b5e + a9fcd2f0-fc34-11ea-94b3-672578571798 + a9fcf3a2-fc34-11ea-a353-638515529755 + a9fd144a-fc34-11ea-80f0-73768aff7e32 + a9fd3452-fc34-11ea-af6a-9bf0f5f36281 + a9fd54b4-fc34-11ea-85d1-e7e846af26f3 + a9fd7368-fc34-11ea-97be-5b44ae67cce7 + a9fd9316-fc34-11ea-8f56-fbecc2da5d26 + a9fdb256-fc34-11ea-9c16-c7f4661c9e8c + a9fdd114-fc34-11ea-9919-cf92f585b9a6 + a9fdee74-fc34-11ea-8db7-2f52cb64519c + a9fe132c-fc34-11ea-8e65-4b40d93747ed + a9fe3596-fc34-11ea-a955-03e22546fc76 + a9fe58c8-fc34-11ea-8c46-3f44ab466b8f + a9fe7844-fc34-11ea-a7d2-2b2d95f2856b + a9fe9ae0-fc34-11ea-84a0-afd7fe624a27 + a9febd18-fc34-11ea-872a-a7116597456c + a9fee36a-fc34-11ea-a444-6f3f3953514c + a9ff03a4-fc34-11ea-98a0-df9199ba15e0 + a9ff2226-fc34-11ea-9184-d753cbda47e2 + a9ff4350-fc34-11ea-80e1-c3bf4e477433 + a9ff633a-fc34-11ea-bf5e-03749d6a2922 + a9ff8284-fc34-11ea-85a6-936c01e59def + a9ffa2dc-fc34-11ea-ac6b-9ba9a044f91a + a9ffc280-fc34-11ea-8ac1-33e0960d003c + a9ffe26a-fc34-11ea-a71a-9bdebd110ca1 + aa000218-fc34-11ea-9cac-77ce6a3c5919 + aa001f82-fc34-11ea-a6ff-47464c213eb3 + aa0041a6-fc34-11ea-9b67-9f29454b6995 + aa00632a-fc34-11ea-b767-df92e892ebc5 + aa008210-fc34-11ea-89ea-2be023ae0bf3 + aa00a556-fc34-11ea-bab3-b78ccd6921cf + aa00c630-fc34-11ea-9a81-cbea6fb6837e + aa00e87c-fc34-11ea-b93c-378747265eea + aa0108a2-fc34-11ea-a903-87c2e9e5eae5 + aa012c42-fc34-11ea-b585-674ff65a9ed4 + aa014bbe-fc34-11ea-92dd-a7e253505860 + aa016e00-fc34-11ea-97de-9bfd8a9985e9 + aa018e1c-fc34-11ea-a173-ab1003d31ec7 + aa01ad8e-fc34-11ea-b02d-5b2b4d9cd77e + aa01cdd2-fc34-11ea-b6e5-ff4ee63bac4b + aa01ee5c-fc34-11ea-90a4-2ba2c3dfb989 + aa020e6e-fc34-11ea-adc7-3b81b2ef638e + aa022ca0-fc34-11ea-933c-637cb5266cb8 + aa024b72-fc34-11ea-93c2-17b05185ed0b + aa0269f4-fc34-11ea-ab4a-7f4680501f4e + aa028858-fc34-11ea-9890-0b890d163906 + aa02a73e-fc34-11ea-9c1e-5ba84657d561 + aa02c62e-fc34-11ea-becc-d785bcd1414a + aa02e456-fc34-11ea-b129-df568b861b0b + aa03036e-fc34-11ea-8138-43eb3d93e542 + aa0322a4-fc34-11ea-b587-2f02fcf2512d + aa0341b2-fc34-11ea-ae97-c354e99d1f68 + aa0362be-fc34-11ea-bd26-9783b820b758 + aa038334-fc34-11ea-9a39-b7648678d817 + aa03a558-fc34-11ea-a6b6-fb6c9b9e5c82 + aa03c498-fc34-11ea-86d1-9be4ccb2bcbf + aa03e504-fc34-11ea-a47b-6f79ad52a5e5 + aa0405e8-fc34-11ea-9068-a712d71631be + aa042ae6-fc34-11ea-accb-438e4529a5aa + aa044b2a-fc34-11ea-be30-eb0e186df636 + aa046d80-fc34-11ea-8fcf-6743c31d6803 + aa049058-fc34-11ea-8f12-478fb3f78a28 + aa04af16-fc34-11ea-9d77-fbd9dcba8bec + aa04cd8e-fc34-11ea-af6f-f7afa3ee1e39 + aa04ea62-fc34-11ea-a5a4-f715bd7bcc0e + aa0507c2-fc34-11ea-a936-9fe4108d57a8 + aa0526a8-fc34-11ea-a5b9-53cec429312f + aa05475a-fc34-11ea-9c62-b7f859b8ae70 + aa056636-fc34-11ea-aa93-fbb45ae3b406 + aa058800-fc34-11ea-9500-53d3755a8150 + aa05a61e-fc34-11ea-bba0-3faff662f0f9 + aa05c68a-fc34-11ea-8572-9f7150a2613f + aa05e746-fc34-11ea-b216-afd5210023dd + aa06092e-fc34-11ea-94d9-777b778a9323 + aa062dfa-fc34-11ea-a09c-73879e0381e6 + aa065122-fc34-11ea-bcdb-73f10b744b8e + aa067328-fc34-11ea-910d-37f435af5a0a + aa06992a-fc34-11ea-a584-43929d3327e7 + aa06b98c-fc34-11ea-80db-1b165dbbd768 + aa06da02-fc34-11ea-8c48-67f6e2f01b5c + aa06f9a6-fc34-11ea-9cb5-bb63e037550c + aa0718c8-fc34-11ea-8741-bf5fb2f05f6d + aa0739fc-fc34-11ea-9edc-27242baab72e + aa0758ba-fc34-11ea-be12-afcee92756a0 + aa077692-fc34-11ea-b69e-0f44df7751e1 + aa07978a-fc34-11ea-959c-afe42adbbcae + aa07b742-fc34-11ea-9214-3ffb51fc6042 + aa07d858-fc34-11ea-9d8a-47525b22e84c + aa07f7e8-fc34-11ea-a13a-f79e44e1aa64 + aa0817be-fc34-11ea-b183-0b17cea7fb49 + aa083820-fc34-11ea-85ad-9bd67d84ddc8 + aa0857c4-fc34-11ea-9547-8b8f655a53b2 + aa0877a4-fc34-11ea-bbb9-5b801260d2a1 + aa089dd8-fc34-11ea-8b6c-67b96e400197 + aa08bef8-fc34-11ea-b278-5b7686726973 + aa08de60-fc34-11ea-9eb9-5f72c4162c97 + aa08ffa8-fc34-11ea-9d34-5f8e8c1bbc10 + aa092528-fc34-11ea-acf5-5758c83e9c45 + aa094670-fc34-11ea-aee5-1fe99b20de7d + aa09668c-fc34-11ea-8529-8bd017ea9fca + aa098892-fc34-11ea-8028-3bf56b7cdce7 + aa09a7b4-fc34-11ea-a097-53383fd1cc4a + aa09c58c-fc34-11ea-ac2c-9f563ccc6da7 + aa09e81e-fc34-11ea-9620-1b13e5f447ab + aa0a095c-fc34-11ea-be25-7b0e24f4ffb1 + aa0a28b0-fc34-11ea-bf3b-2fdae54097d7 + aa0a47a0-fc34-11ea-9c57-f33e4490a079 + aa0a667c-fc34-11ea-bf5b-ab6fd087af5f + aa0a836e-fc34-11ea-a409-4b13044a3a05 + aa0aa2ae-fc34-11ea-841c-d3205f066bfe + aa0ac04a-fc34-11ea-9977-c39a641053bd + aa0ae0ca-fc34-11ea-a6e2-7b982087b86b + aa0b023a-fc34-11ea-8d32-67a0a8f32ff0 + aa0b28d2-fc34-11ea-bc60-4f96246dfa27 + aa0b4d80-fc34-11ea-9d80-a78838f54c0f + aa0b7350-fc34-11ea-bc48-1f452a789121 + aa0b96a0-fc34-11ea-bfc7-c76a1ebfa717 + aa0bb5f4-fc34-11ea-bebd-db71d7a3d952 + aa0bd728-fc34-11ea-a46b-37f20a0f2a43 + aa0bf5aa-fc34-11ea-9aff-435f071bd1f5 + aa0c15e4-fc34-11ea-8b1e-334b362b5db3 + aa0c354c-fc34-11ea-a960-afba0ee07cd7 + aa0c54c8-fc34-11ea-842d-db29cf25d678 + aa0c75b6-fc34-11ea-89eb-c76895d4424f + aa0c9442-fc34-11ea-bf26-b7806e118d6c + aa0cb21a-fc34-11ea-8a62-6b442e53bd50 + aa0cd1b4-fc34-11ea-94dd-0b16ba749884 + aa0cf14e-fc34-11ea-b624-cf3a546a67c2 + aa0d13ae-fc34-11ea-a9ea-e785dfbc6ab4 + aa0d32bc-fc34-11ea-bfa0-3bed35873463 + aa0d5198-fc34-11ea-a7d7-fbf833566ad0 + aa0d7420-fc34-11ea-8fe4-e788e44d65fc + aa0d9824-fc34-11ea-9f40-d71711db9aa8 + aa0dbd2c-fc34-11ea-92d5-1f11953f6ce9 + aa0ddd0c-fc34-11ea-a326-b36f2540671e + aa0dfc2e-fc34-11ea-ba80-a3f22330cdaf + aa0e1f4c-fc34-11ea-9207-bf50f81f4a37 + aa0e3e96-fc34-11ea-84d6-9bb008c1fa07 + aa0e5fd4-fc34-11ea-b8cc-670436a5b918 + aa0e811c-fc34-11ea-90a8-231b7b5e6618 + aa0ea0fc-fc34-11ea-abea-377296f0254b + aa0ec104-fc34-11ea-a020-03fbc6cd586b + aa0edfc2-fc34-11ea-a885-abd79e02fd93 + aa0f0100-fc34-11ea-b75b-dfba62915e1f + aa0f2126-fc34-11ea-a004-87408cc41898 + aa0f421e-fc34-11ea-9fdf-bff927815f19 + aa0f63ac-fc34-11ea-a62b-4b857c565154 + aa0f84ae-fc34-11ea-8973-5b71cc214cbf + aa0fa506-fc34-11ea-a8c3-5f7a437f91db + aa0fc392-fc34-11ea-acbd-6bc20cef86fd + aa0fe14c-fc34-11ea-91a0-5b546635bae3 + aa1005be-fc34-11ea-8d86-b3e9ca37d96a + aa102bfc-fc34-11ea-a423-ebe0d5e85691 + aa104eac-fc34-11ea-8ec3-8b5929a9ecb4 + aa107148-fc34-11ea-8e73-6f849f535436 + aa1093c6-fc34-11ea-bc7e-0b0919d0d7b2 + aa10b4be-fc34-11ea-9f1d-7700f895047b + aa10d5b6-fc34-11ea-a7d8-875b5991b77a + aa10f44c-fc34-11ea-9bd3-8b8c8644b490 + aa11138c-fc34-11ea-ab21-d7aa1d94c59a + aa11356a-fc34-11ea-8a86-4f34b92c7cc6 + aa1154e6-fc34-11ea-a6f8-fb5c52c931d8 + aa117476-fc34-11ea-8518-6faa805bd6ca + aa119424-fc34-11ea-9210-5bcc5b189376 + aa11b486-fc34-11ea-9b64-53ccdb852cfa + aa11d380-fc34-11ea-9a9b-a3bd507b938d + aa11f482-fc34-11ea-9e1c-ab28371351c3 + aa12137c-fc34-11ea-ba09-b363c711cee7 + aa123230-fc34-11ea-8198-bf4c2e44fb94 + aa125288-fc34-11ea-9768-53d6a9d014c7 + aa127164-fc34-11ea-bf2e-abd58f4f531b + aa129130-fc34-11ea-bcbc-27d28e6888e0 + aa12af94-fc34-11ea-9ba6-3fa44eae98d8 + aa12d532-fc34-11ea-b587-fb62d28c986e + aa12f8be-fc34-11ea-aed2-e7ded77987b4 + aa1318bc-fc34-11ea-8fa7-57669da3e589 + aa1337e8-fc34-11ea-9e69-abeee3c33ab0 + aa1357fa-fc34-11ea-b83d-9738578f658b + aa137794-fc34-11ea-84e5-bfdc477d994e + aa1396a2-fc34-11ea-8c10-f38b4f7cbd09 + aa13b7c2-fc34-11ea-a2a3-338588c7a080 + aa13d720-fc34-11ea-95d5-abf99465e7cf + aa13f6ba-fc34-11ea-a400-bf0c42a9d182 + aa141744-fc34-11ea-b904-7b69197401a9 + aa1434ea-fc34-11ea-ac72-675b04942245 + aa1453da-fc34-11ea-897f-f752f8b62900 + aa147360-fc34-11ea-8319-d34a7fb57d9a + aa1493a4-fc34-11ea-a8bb-8396e2319181 + aa14b4ba-fc34-11ea-96ae-abd257845714 + aa14d224-fc34-11ea-8baf-9767e0c37b6c + aa14f434-fc34-11ea-9ace-9f1a1149c818 + aa151270-fc34-11ea-9d2c-37c67ff68a6e + aa15332c-fc34-11ea-a588-1f0817e612c8 + aa15585c-fc34-11ea-8898-ffa80c9bf58e + aa157c4c-fc34-11ea-9da4-e319e1076ffb + aa159d76-fc34-11ea-bd61-5b3df840af09 + aa15bdd8-fc34-11ea-8b6d-cb8930baa525 + aa15de08-fc34-11ea-99c6-07c15e84791a + aa15fe92-fc34-11ea-83a5-7385222d8cf9 + aa161fda-fc34-11ea-bf7e-67b479f54522 + aa163e0c-fc34-11ea-8f15-83a1a2ef8268 + aa165bd0-fc34-11ea-9008-cbf1cb69674b + aa167bce-fc34-11ea-aada-df5a8964ee16 + aa169dde-fc34-11ea-9099-933618741291 + aa16bc06-fc34-11ea-a9db-43c83c4936e8 + aa16dc72-fc34-11ea-b69d-079a03849e7d + aa16fb30-fc34-11ea-834b-1b0b8c2a546a + aa171a84-fc34-11ea-a87d-976eb1db4f69 + aa173ac8-fc34-11ea-8f04-9b03f3d4c1d0 + aa175d96-fc34-11ea-a2da-7f89f4be2783 + aa177e70-fc34-11ea-9e80-cf1b8c024b3b + aa17a062-fc34-11ea-ae86-9b6eb4e99acc + aa17bf84-fc34-11ea-a327-87d9ca0d135f + aa17dfbe-fc34-11ea-9a11-638550eed9bb + aa1804da-fc34-11ea-ae33-73b650d717d8 + aa1827b2-fc34-11ea-b28d-dfaa7eac6039 + aa184e5e-fc34-11ea-a952-67c52d6bc1ab + aa18705a-fc34-11ea-af94-2725f819a626 + aa188fb8-fc34-11ea-ab61-4be23e61567d + aa18ae6c-fc34-11ea-abd5-ebb5a5629456 + aa18cffa-fc34-11ea-be1c-536276265de6 + aa18ee86-fc34-11ea-979f-bfdb57010f09 + aa190f06-fc34-11ea-9a27-f7214846391c + aa192e5a-fc34-11ea-8dc5-936eb9683456 + aa194e30-fc34-11ea-bbd9-7362d8390ff3 + aa196db6-fc34-11ea-9faa-8334f727fe0d + aa198f4e-fc34-11ea-9934-9360b1abd687 + aa19b078-fc34-11ea-919a-d7a539a9d16b + aa19cd42-fc34-11ea-bd9b-ef3989205af4 + aa19ed4a-fc34-11ea-a6a6-c39b295c1e29 + aa1a0d52-fc34-11ea-8744-c7bbf9304454 + aa1a2e9a-fc34-11ea-92d8-4bec6ca59da4 + aa1a4e66-fc34-11ea-aebb-9363c4ffa6e1 + aa1a6fc2-fc34-11ea-bf81-4ffc24edf088 + aa1a90e2-fc34-11ea-b52e-a7e6fbca71e4 + aa1ab144-fc34-11ea-b6ee-db152a5a0eaa + aa1ad02a-fc34-11ea-90a7-f788b4f51c4e + aa1af30c-fc34-11ea-84bd-5f1a057881e8 + aa1b1a44-fc34-11ea-b2cf-33c6c3a76a48 + aa1b39b6-fc34-11ea-a7e0-1790ca5f9a3f + aa1b59e6-fc34-11ea-a0d1-070d3546e492 + aa1b79a8-fc34-11ea-b8b4-0fd8ffaba6f9 + aa1b9802-fc34-11ea-9195-c3a42a1e6da0 + aa1bb90e-fc34-11ea-8521-2fae34762da0 + aa1bd862-fc34-11ea-92c4-777e21aeeef6 + aa1bf91e-fc34-11ea-b4cd-0b2f4686d389 + aa1c18d6-fc34-11ea-8fc7-1f34971cac93 + aa1c3776-fc34-11ea-8d23-53e7b1aba7c0 + aa1c5882-fc34-11ea-aa17-c76a8a363616 + aa1c77f4-fc34-11ea-b08a-c704cbaeeab8 + aa1c9892-fc34-11ea-a8b6-23b85b99a3ba + aa1cb9ee-fc34-11ea-8a65-238ed69d0fd3 + aa1cdbfe-fc34-11ea-9c4a-b7e38bbaade9 + aa1cfe90-fc34-11ea-bce8-435db63d1728 + aa1d1f56-fc34-11ea-ac36-83d3e927a4e2 + aa1d40b2-fc34-11ea-8f41-db549798d096 + aa1d6628-fc34-11ea-a3c2-43c160c62e89 + aa1d8a18-fc34-11ea-9035-7b579188f729 + aa1daab6-fc34-11ea-be6a-db2e78a4bfe1 + aa1dc992-fc34-11ea-a3f0-33bae64022b2 + aa1de706-fc34-11ea-9e24-8b096d61bbdb + aa1e0786-fc34-11ea-9a4d-4ffc9eb13059 + aa1e29a0-fc34-11ea-8124-43a4b3e671ed + aa1e48e0-fc34-11ea-aba1-2bf64cbaf4ac + aa1e6a96-fc34-11ea-8dfa-9f6326675861 + aa1e8aa8-fc34-11ea-b155-8b29a9f52075 + aa1eaaf6-fc34-11ea-8804-b7ca4e12d10d + aa1ecaea-fc34-11ea-8932-8b98fab7c9cb + aa1eeb10-fc34-11ea-80de-67e4f5bcb53c + aa1f0c80-fc34-11ea-8ad9-47ec2e5f89b7 + aa1f2a8a-fc34-11ea-a851-3fff933bcebb + aa1f4ca4-fc34-11ea-8311-5f80be79243d + aa1f6c34-fc34-11ea-bd9d-37d67f15f5fe + aa1f8c64-fc34-11ea-afb2-e7eff020311f + aa1fae4c-fc34-11ea-9aed-ef0eb0ddcf19 + aa1fd502-fc34-11ea-a795-b3b3805fdf77 + aa1ff960-fc34-11ea-a7a1-2306a22c08ba + aa201b98-fc34-11ea-8c00-d7c757697b70 + aa203ae2-fc34-11ea-ad45-1fed6d9f76c7 + aa205b80-fc34-11ea-8ee8-3394fa73a179 + aa207d7c-fc34-11ea-af95-131830921b42 + aa209ec4-fc34-11ea-8ce2-63775ccef3f9 + aa20be2c-fc34-11ea-9b7b-ebc2827cc635 + aa20df06-fc34-11ea-8cc7-cfa113ea6e25 + aa2100d0-fc34-11ea-a8ab-e3cb1a3b644e + aa211ed0-fc34-11ea-82c5-3b949dab1df0 + aa213dde-fc34-11ea-a68b-333d9a92997d + aa215dc8-fc34-11ea-9e28-f7c0d15ff523 + aa217ccc-fc34-11ea-9647-ff65f0be9cea + aa219c70-fc34-11ea-a068-03492af5b4c2 + aa21bdfe-fc34-11ea-a860-4317535590c2 + aa21dd8e-fc34-11ea-aa2f-775aa60d9830 + aa21fe18-fc34-11ea-baf4-c7a9f952fa67 + aa221ede-fc34-11ea-9d8f-67909dcd9c62 + aa223eaa-fc34-11ea-84ed-33bbf9c575f5 + ab82a21c-fc34-11ea-a00b-db1a18e277e6 + ac00c3ae-fc34-11ea-8627-e3f64444c02d + ac00e67c-fc34-11ea-95da-177db4b24217 + ac01080a-fc34-11ea-a318-1b0e3a9959e8 + + diff --git a/bubble-server/src/test/resources/charset_detection/meta-windows-1250.html b/bubble-server/src/test/resources/charset_detection/meta-windows-1250.html new file mode 100644 index 00000000..67e27478 --- /dev/null +++ b/bubble-server/src/test/resources/charset_detection/meta-windows-1250.html @@ -0,0 +1,2554 @@ + + + + + + + + + + + + Example.local using Windows-1250 text encoding + + + a8e04adc-fc34-11ea-871e-cf879e8aa41d + a8e07e80-fc34-11ea-937b-7fe01851f53c + a8e0ae00-fc34-11ea-9862-bb138458428d + a8e0e028-fc34-11ea-bf81-2fd0e36323b3 + a8e10ec2-fc34-11ea-8bb3-5babf224dfec + a8e13bb8-fc34-11ea-a6a9-2f952ac24f48 + a8e16d68-fc34-11ea-9a43-03abb9c3a161 + a8e19c8e-fc34-11ea-a7de-43467c6facfe + a8e1cd80-fc34-11ea-9a14-bf5363ecbbb6 + a8e20138-fc34-11ea-b4d1-bf7643261884 + a8e2343c-fc34-11ea-83b9-a372f40effc3 + a8e274e2-fc34-11ea-9a1d-bb0047af455d + a8e2acb4-fc34-11ea-9c58-8b2d90b21f52 + a8e2ebc0-fc34-11ea-8565-dfee75e17960 + a8e31f3c-fc34-11ea-bde1-13677bfb5926 + a8e3525e-fc34-11ea-988c-ffe4ae297a3c + a8e387ba-fc34-11ea-a1ae-03f43e79569b + a8e3bef6-fc34-11ea-a079-e78a11603b05 + a8e3eec6-fc34-11ea-a3fd-c763a8313b0e + a8e41e82-fc34-11ea-9e68-2f0fc7bf6c8c + a8e450e6-fc34-11ea-a15d-ef5194a356a2 + a8e489a8-fc34-11ea-b121-6f829f9daa25 + a8e4ba40-fc34-11ea-8c29-eb4aec42fe7a + a8e4e7d6-fc34-11ea-afeb-2f9b49e9dd2d + a8e514ea-fc34-11ea-8460-db20fd444f94 + a8e558e2-fc34-11ea-8fc1-075d38d4efb3 + a8e593b6-fc34-11ea-b2ba-8740223fd8f8 + a8e5dd1c-fc34-11ea-90ba-fb5748d7eac0 + a8e64a7c-fc34-11ea-bdb9-6b7e8069143f + a8e68cc6-fc34-11ea-976b-27f4ca521c4c + a8e6be80-fc34-11ea-b655-87bed243253e + a8e6ece8-fc34-11ea-80b5-e36353450fb7 + a8e718a8-fc34-11ea-bab9-1b45f6beadbf + a8e74bac-fc34-11ea-a8c2-1b9fe976f51e + a8e780b8-fc34-11ea-bfc4-1b6abd9f3ec8 + a8e7ab56-fc34-11ea-8559-87c2b0598b1a + a8e7d9dc-fc34-11ea-a97c-3f1db496c34f + a8e8133e-fc34-11ea-bd29-c75ff04cdbba + a8e83742-fc34-11ea-8355-1f233c72876e + a8e85934-fc34-11ea-b7dc-4fd67d4f92b7 + a8e87824-fc34-11ea-bb3f-5f3c86590b94 + a8e89638-fc34-11ea-87d1-7f39e18e8d48 + a8e8b4c4-fc34-11ea-b299-931361dba8ee + a8e8d1ac-fc34-11ea-aeaf-17b78f4d0923 + a8e8f3ee-fc34-11ea-b90a-cf1720d23172 + a8e91806-fc34-11ea-b645-ef78fbdff129 + a8e93764-fc34-11ea-b0b8-33fc9bbf9596 + a8e95e7e-fc34-11ea-83d8-4f6cc7c7d0aa + a8e97f1c-fc34-11ea-9349-03907479172a + a8e9a26c-fc34-11ea-b720-d7d0d24cb2c0 + a8e9cd96-fc34-11ea-acc2-4777381c0eb4 + a8e9ee52-fc34-11ea-b5ea-77ad38731fc3 + a8ea1166-fc34-11ea-af35-a3c1813404cb + a8ea3056-fc34-11ea-8686-dfa1657d182c + a8ea5162-fc34-11ea-9964-f7e6d2d619d5 + a8ea7f0c-fc34-11ea-a804-4f4500b35de6 + a8eab3be-fc34-11ea-a5f7-3fffef05b852 + a8eae7d0-fc34-11ea-a4aa-d3f64f9ea285 + a8eb1476-fc34-11ea-9df4-033a02abcaf9 + a8eb337a-fc34-11ea-9a41-03d06667c4c7 + a8eb50da-fc34-11ea-bfc2-87feaba3d87b + a8eb70c4-fc34-11ea-a88e-47e0d6b95432 + a8eb9676-fc34-11ea-b539-6fe90bb2192c + a8ebbc1e-fc34-11ea-823d-5b5a35e6ae46 + a8ebe126-fc34-11ea-81ba-e359a254de92 + a8ec0408-fc34-11ea-92be-2b0a36ceb5b2 + a8ec2618-fc34-11ea-885d-8b0a885bd5af + a8ec494a-fc34-11ea-841f-af23e5312e03 + a8ec6772-fc34-11ea-bc7a-cfe098c519f2 + a8ec86da-fc34-11ea-8819-6b3b4a6f068f + a8eca444-fc34-11ea-a69a-cf31c97644c9 + a8ecc1f4-fc34-11ea-b122-9fb9d7995848 + a8ecdfae-fc34-11ea-9b4c-3315b4d83847 + a8ecfe62-fc34-11ea-b095-4fc5c01fe695 + a8ed1b40-fc34-11ea-a4ac-af8478e98cfc + a8ed381e-fc34-11ea-aebf-4fed988d5da5 + a8ed54f2-fc34-11ea-a6eb-f3398cfb3df3 + a8ed71b2-fc34-11ea-bafe-e7ac34d8bcc3 + a8ed923c-fc34-11ea-aafd-d790b4ec1461 + a8edb082-fc34-11ea-8cab-bb3b61f4aef3 + a8edcdba-fc34-11ea-8733-ab533a82bde8 + a8edf150-fc34-11ea-a09d-573e44acd5c6 + a8ee14a0-fc34-11ea-8e07-773653ea9f15 + a8ee35de-fc34-11ea-82e5-4ffdc6523c27 + a8ee5a0a-fc34-11ea-9a77-6772bfbc1db7 + a8ee7936-fc34-11ea-b1e2-3f85d01c5723 + a8ee9c72-fc34-11ea-8067-d7f4b29acaef + a8eebfe0-fc34-11ea-92ac-a3bfe0646661 + a8eedfb6-fc34-11ea-9f6d-e7342f75d0a8 + a8eefce4-fc34-11ea-a6ab-6b78097ca2ed + a8ef1cb0-fc34-11ea-ae8c-7bc991fbe9a8 + a8ef3b3c-fc34-11ea-9522-c788c152b482 + a8ef5900-fc34-11ea-ac97-57ca3c08dfe7 + a8ef7692-fc34-11ea-9055-4f070d1c2fb3 + a8ef951e-fc34-11ea-9e88-afb7a9538c5d + a8efb36e-fc34-11ea-9dfb-bb2e316afea2 + a8efcf52-fc34-11ea-82dd-efba2aa0a291 + a8efed3e-fc34-11ea-8268-4f8b24b2c17a + a8f00b16-fc34-11ea-a0e5-83964f954810 + a8f026aa-fc34-11ea-8ba3-6b3b24505944 + a8f04310-fc34-11ea-b561-7777fe7dec9b + a8f05f12-fc34-11ea-b175-538185bfcb85 + a8f07aa6-fc34-11ea-8f4b-3f84ec120699 + a8f09a7c-fc34-11ea-aaa8-5bc1c3757147 + a8f0bcb4-fc34-11ea-9ca2-33bd58e17b61 + a8f0df64-fc34-11ea-9c1e-9f8a81aa56f1 + a8f0ff44-fc34-11ea-a0b5-773a5ad4acc8 + a8f11e98-fc34-11ea-9811-df39d88566a5 + a8f13d92-fc34-11ea-ab9b-d3e821003a00 + a8f15b7e-fc34-11ea-93c1-d36257e2a893 + a8f179e2-fc34-11ea-a9b5-afe32ecb804e + a8f198c8-fc34-11ea-90ac-874e37ab50b3 + a8f1b98e-fc34-11ea-bafc-47298e3c4ef5 + a8f1db4e-fc34-11ea-ae75-7fb6e94ea8e3 + a8f1f962-fc34-11ea-8043-bf01d2557a5f + a8f21992-fc34-11ea-b680-af271c33b109 + a8f2376a-fc34-11ea-b412-f7ac5e971c82 + a8f258e4-fc34-11ea-9695-0f2b23673772 + a8f2796e-fc34-11ea-a92b-ebcb77d570f9 + a8f2993a-fc34-11ea-9a9f-3bf731340eee + a8f2b6a4-fc34-11ea-a0e2-7b85d1a628a0 + a8f2d616-fc34-11ea-8c0d-bb10ac341225 + a8f2f3c6-fc34-11ea-ba2c-47af5e86c02e + a8f31220-fc34-11ea-a857-8b3ae4e18c62 + a8f331d8-fc34-11ea-beaf-e7a196691f96 + a8f35064-fc34-11ea-8224-7f75cd6f5335 + a8f36ee6-fc34-11ea-be69-2b08a684fcfa + a8f38f66-fc34-11ea-b135-0b673fddc3d3 + a8f3af3c-fc34-11ea-a517-3b1f6ba9e4d5 + a8f3ce4a-fc34-11ea-8827-7f575606d4bc + a8f3f528-fc34-11ea-baa3-3371270b266b + a8f4156c-fc34-11ea-8ff2-973aebc5e7f9 + a8f43178-fc34-11ea-90dd-1b69353bdf4a + a8f45392-fc34-11ea-b9da-9fba59b5f205 + a8f47160-fc34-11ea-b1f3-f7beabb9eaba + a8f48fc4-fc34-11ea-b06b-2f7eebe66d99 + a8f4ad1a-fc34-11ea-adbb-3fc42cd68689 + a8f4cb24-fc34-11ea-9f38-5b3e1022d02e + a8f4e96a-fc34-11ea-8b3a-3764ab340dde + a8f50896-fc34-11ea-9c56-1b33f7d3ad5d + a8f5268c-fc34-11ea-8e40-e3f0139704bd + a8f54496-fc34-11ea-bf6b-47ee3c476689 + a8f562f0-fc34-11ea-9b10-9382b5e0d54c + a8f580e6-fc34-11ea-bd47-a7e6a79c62b9 + a8f59bbc-fc34-11ea-9662-6feeb0498484 + a8f5ba34-fc34-11ea-81db-871a0945f917 + a8f5d8b6-fc34-11ea-a79e-8fce9911cb46 + a8f5f936-fc34-11ea-b57b-c31a9537d7f8 + a8f61e2a-fc34-11ea-a9bf-97d8967d6176 + a8f63f72-fc34-11ea-a80c-03f19ed96196 + a8f65dfe-fc34-11ea-85bf-2fefca57504e + a8f67d02-fc34-11ea-a033-f73e73c79983 + a8f69abc-fc34-11ea-b85a-63a06c4c7441 + a8f6b8d0-fc34-11ea-8048-fb0beb6788af + a8f6d78e-fc34-11ea-a45d-db09a730fab3 + a8f6f4a8-fc34-11ea-9344-57d69b3cebce + a8f71316-fc34-11ea-8dd9-7bff549b2e5b + a8f73346-fc34-11ea-9dae-07ba3c9f32eb + a8f75326-fc34-11ea-be60-c3d1e15dc426 + a8f770fe-fc34-11ea-bdfe-f7af652cca57 + a8f78ec2-fc34-11ea-bb9f-3762899e6bf3 + a8f7add0-fc34-11ea-b303-df07fc847946 + a8f7cf18-fc34-11ea-bbfa-2f8b144916bf + a8f7ee08-fc34-11ea-a74f-6754b7031145 + a8f80cd0-fc34-11ea-a485-33a96c7ac559 + a8f82e2c-fc34-11ea-a060-fb60f054364a + a8f84b82-fc34-11ea-a5d4-0f453475e465 + a8f86a9a-fc34-11ea-81bd-7fa584fab0f0 + a8f88cf0-fc34-11ea-9ad0-ef3ec11a8cf0 + a8f8abe0-fc34-11ea-891c-3391ecc4c163 + a8f8cada-fc34-11ea-8e63-ebea91a10c1c + a8f8eab0-fc34-11ea-94b0-2f18cb5f7c3a + a8f908d8-fc34-11ea-97ab-5ba8c17da4c3 + a8f92b60-fc34-11ea-a42f-c3dfe95c84b7 + a8f94a00-fc34-11ea-95b6-a7703082b861 + a8f96896-fc34-11ea-b0ec-f35a46eac0a7 + a8f986c8-fc34-11ea-b704-fb4aa31d9232 + a8f9a4dc-fc34-11ea-b629-e348d62ad485 + a8f9c458-fc34-11ea-b838-471d5304cac6 + a8f9e384-fc34-11ea-88aa-a73d64f4ff94 + a8fa013e-fc34-11ea-a49b-1b2d0cfca1d4 + a8fa209c-fc34-11ea-b5fe-b799f9ae695c + a8fa3d20-fc34-11ea-95e3-e31740a35040 + a8fa5918-fc34-11ea-86a3-a7bc1857bacd + a8fa76fa-fc34-11ea-8266-074097440a20 + a8fa95d6-fc34-11ea-aae6-a342563f4b43 + a8fab91c-fc34-11ea-8119-63afe4adba87 + a8fad9d8-fc34-11ea-adc6-df37918a4242 + a8fafba2-fc34-11ea-899e-4fd1c008f938 + a8fb1ee8-fc34-11ea-9e4d-2fe05be1b250 + a8fb3ec8-fc34-11ea-b5a4-2b1c1d62d392 + a8fb5cdc-fc34-11ea-a888-431cce0ae1b0 + a8fb8176-fc34-11ea-ae08-b3569a73a60e + a8fba0de-fc34-11ea-8d6b-f79697c530fc + a8fbc118-fc34-11ea-b21a-5b30c4352bdb + a8fbe166-fc34-11ea-9a10-8b17126573ec + a8fc0088-fc34-11ea-b7a2-cb01fadfc47d + a8fc1e56-fc34-11ea-ba16-dbb6261fd981 + a8fc3eae-fc34-11ea-88b7-5bfe515fadc2 + a8fc5c36-fc34-11ea-905b-bba4d1adda87 + a8fc7950-fc34-11ea-ab4b-c343abb58490 + a8fc969c-fc34-11ea-bccb-af220ed0ea3a + a8fcb640-fc34-11ea-b893-abf83ea5b380 + a8fcd63e-fc34-11ea-94ff-4f03386de38d + a8fcf510-fc34-11ea-8630-933c0fe261e5 + a8fd1388-fc34-11ea-bdd4-676bf339f8f7 + a8fd308e-fc34-11ea-a54d-234439bc42f4 + a8fd4d12-fc34-11ea-93e4-5f7a784cc946 + a8fd6e14-fc34-11ea-90da-d3b8b371015a + a8fd8aac-fc34-11ea-94a2-2b435d663f4a + a8fdaf0a-fc34-11ea-b349-b739edc4252e + a8fdd084-fc34-11ea-824b-e38039771c6c + a8fdf0e6-fc34-11ea-a682-63489442383e + a8fe11ac-fc34-11ea-935d-cb525636a809 + a8fe306a-fc34-11ea-9b08-3b967017775d + a8fe4e60-fc34-11ea-9e86-fb3b27a6d2a3 + a8fe6c24-fc34-11ea-81f1-a7d4ac76df29 + a8fe8c04-fc34-11ea-958d-739625d699c0 + a8feab76-fc34-11ea-b52d-1719139e4119 + a8fec9c6-fc34-11ea-9be3-d3d39a53aec1 + a8fee668-fc34-11ea-8117-33179acfedf4 + a8ff04fe-fc34-11ea-a5c4-4b243755b4ae + a8ff248e-fc34-11ea-96bf-9fd09dc700b6 + a8ff42c0-fc34-11ea-a77f-d3184793bf29 + a8ff60b6-fc34-11ea-b3da-8f3823b132aa + a8ff7f10-fc34-11ea-afab-b7b706388fe8 + a8ff9e8c-fc34-11ea-9cfc-6bd365e537b1 + a8ffbc6e-fc34-11ea-b6a2-ab35ca6bc806 + a8ffdd16-fc34-11ea-b198-f7ff4be4a33e + a8fffe36-fc34-11ea-956e-67d3d471103a + a900230c-fc34-11ea-a3ba-8f679a17adee + a9004404-fc34-11ea-98ad-df87b11efac7 + a90062d6-fc34-11ea-a3d8-9791cd3cafd9 + a90085fe-fc34-11ea-a6ed-0f1b321aae82 + a900a818-fc34-11ea-939f-773e45dc9ab7 + a900c5fa-fc34-11ea-95b6-57ae0e3e5f9b + a900e35a-fc34-11ea-a9d8-57f7c64c9ca5 + a900ffca-fc34-11ea-8dd5-a7dfeceed25b + a9011d66-fc34-11ea-b99d-135e852661ed + a9013ba2-fc34-11ea-80ea-c3162a28ca4b + a90158ee-fc34-11ea-869f-2b58da9d679a + a90175ae-fc34-11ea-add4-e72b18fc6ac8 + a901969c-fc34-11ea-86c4-a33e277360b3 + a901b3de-fc34-11ea-a488-e7ed96ffd8a1 + a901d0b2-fc34-11ea-a3a5-bf7d9ab9c3ee + a901ef16-fc34-11ea-8735-13ffc6fa98e1 + a9020ce4-fc34-11ea-8854-f7709be2a767 + a9022cec-fc34-11ea-a7f4-f71e757293ed + a9024a6a-fc34-11ea-bb7d-7f4c55f17fe7 + a9026a2c-fc34-11ea-a8d0-93013391e1ca + a90288d6-fc34-11ea-b34b-5f24e1e99ab8 + a902a708-fc34-11ea-a073-77f1d3763f2a + a902c60c-fc34-11ea-b880-eff28e9a0779 + a902ea88-fc34-11ea-ad29-6f7eaa1c30ef + a9030b44-fc34-11ea-8281-ef527e98a4e1 + a90329ee-fc34-11ea-9eb9-a77317b0940a + a9034c94-fc34-11ea-9f3d-87d6820963a3 + a9036a3a-fc34-11ea-83dd-93e80db2b913 + a90389de-fc34-11ea-83fe-67c9c047051c + a903a766-fc34-11ea-b1a2-ebc289efc53d + a903c566-fc34-11ea-8831-5ba9ae1b5df7 + a903e0c8-fc34-11ea-8fff-cbbe0ce1d752 + a903fdb0-fc34-11ea-a79f-c769d42038d3 + a9041bf6-fc34-11ea-8283-abfd32897221 + a9043924-fc34-11ea-ac1d-6f50ecc32c30 + a904576a-fc34-11ea-aaff-1f5341b1fd9f + a90474ac-fc34-11ea-a90f-333c94d4827f + a90491b2-fc34-11ea-9632-471299e5f9ca + a904afda-fc34-11ea-9bad-ef10d3c42ca9 + a904cf24-fc34-11ea-9e24-7f9c62c24673 + a904ece8-fc34-11ea-808d-8bb149635caf + a9050ac0-fc34-11ea-8018-4f1c1eecd273 + a9052a00-fc34-11ea-b6c0-eb7c1c80d294 + a905497c-fc34-11ea-a4ec-0fbae182d41e + a9056880-fc34-11ea-9028-9b8f1e450ca8 + a905846e-fc34-11ea-922c-3f1106ac69ab + a905a4a8-fc34-11ea-9bc3-9beb4f7a8189 + a905c2f8-fc34-11ea-9d67-b717578759c7 + a905e260-fc34-11ea-b39b-93c98e863afd + a90601aa-fc34-11ea-938e-bf398e838fe2 + a9061ec4-fc34-11ea-b040-4f43aa2adfd4 + a9063c88-fc34-11ea-8d73-bb2223696f2c + a9065948-fc34-11ea-b1f8-7b9cb0a65272 + a9067842-fc34-11ea-a015-a3cbc29495e4 + a90698ae-fc34-11ea-a679-bb34a5e8e30e + a906b7da-fc34-11ea-b88d-7f74388792f1 + a906d5b2-fc34-11ea-ae2f-6f2b12dc260c + a906f3e4-fc34-11ea-928a-bb3232c8e108 + a90712ca-fc34-11ea-9984-d3b686120705 + a9073192-fc34-11ea-8015-d70b78816cdf + a9074f7e-fc34-11ea-ba98-c33089e5925f + a90771de-fc34-11ea-8b6f-2fb8f4bff1cf + a9079286-fc34-11ea-b922-b32eb4c4cb90 + a907b70c-fc34-11ea-91e0-4b6b6f62a02f + a907d91c-fc34-11ea-9a74-a34d24f7835c + a907f7ee-fc34-11ea-a2fd-37930e5b02e2 + a9081bde-fc34-11ea-bf59-735804b948fc + a9083e70-fc34-11ea-a9ae-cf4b9fcc2d84 + a9085e5a-fc34-11ea-a744-0f9fd717102f + a9087c8c-fc34-11ea-9ed8-a31bcbd10712 + a9089a14-fc34-11ea-a438-5becb0c2ce27 + a908b68e-fc34-11ea-a654-1bf0cff81e5f + a908d48e-fc34-11ea-be09-930076f1761b + a908f48c-fc34-11ea-9ff9-13bcc749c9c1 + a90912e6-fc34-11ea-b8cc-5b047f479d1b + a90930be-fc34-11ea-9fd0-13072b0fec0e + a9095080-fc34-11ea-828b-3f94672eba65 + a9096e12-fc34-11ea-ac62-070fe2fe4f8f + a9098c08-fc34-11ea-bb29-cbc249d6bc68 + a909a94a-fc34-11ea-8345-77f86e673c79 + a909c592-fc34-11ea-96f3-63cfb14f4f96 + a909e450-fc34-11ea-a737-43ec0bb2dcfe + a90a04ee-fc34-11ea-9708-af0e336b26b8 + a90a2780-fc34-11ea-8e83-2badc4494385 + a90a4896-fc34-11ea-b01a-274db17acbd1 + a90a67fe-fc34-11ea-8517-d3ccc56a36af + a90a8a86-fc34-11ea-8414-eb8de413bd6b + a90aab56-fc34-11ea-861e-2f1158516099 + a90acbc2-fc34-11ea-8d88-573926ab836f + a90aea76-fc34-11ea-8281-c7d75f5ed94e + a90b07ea-fc34-11ea-8b8e-67270b804e97 + a90b2536-fc34-11ea-bd77-d73b16b1832b + a90b408e-fc34-11ea-b1f3-8fb39b01a07b + a90b5f88-fc34-11ea-8959-bb8bfe8f118f + a90b7d38-fc34-11ea-8dc8-c7a1e2ee6628 + a90b996c-fc34-11ea-8713-bb2547c2f608 + a90bb758-fc34-11ea-b54b-43fea9090700 + a90bd472-fc34-11ea-8f19-0f5053305d95 + a90bf240-fc34-11ea-856d-874ec96e8517 + a90c1220-fc34-11ea-b80c-4fcaa1f9baba + a90c2e90-fc34-11ea-9c59-4b6b19ce84b4 + a90c4a9c-fc34-11ea-81a8-5be3b7df2481 + a90c68c4-fc34-11ea-a54a-6335ac4df3e9 + a90c84f8-fc34-11ea-a66e-8f6bce4915ee + a90ca26c-fc34-11ea-ad70-ef230de4349d + a90cbea0-fc34-11ea-80e2-b33dc1699c03 + a90cddcc-fc34-11ea-89e8-839c0432991a + a90d02a2-fc34-11ea-8c81-eb7e5446eac7 + a90d22e6-fc34-11ea-8bfa-e757a26dfa82 + a90d415e-fc34-11ea-9037-9f66980b50b0 + a90d5f90-fc34-11ea-b612-976ce0204316 + a90d7c0a-fc34-11ea-860b-c3c87bf883ae + a90d9938-fc34-11ea-8b29-a7aebf56ef33 + a90db99a-fc34-11ea-8ee4-4f1478ccde2b + a90dd808-fc34-11ea-91aa-6b08577b39b6 + a90df7d4-fc34-11ea-a1dd-677871661735 + a90e1520-fc34-11ea-aa08-e7ec09622692 + a90e3230-fc34-11ea-8587-9fa38d685881 + a90e4d6a-fc34-11ea-8338-33e7f326d026 + a90e6aac-fc34-11ea-8c87-73f5d7ff59d7 + a90e871c-fc34-11ea-b5ba-23afae4359f8 + a90ea580-fc34-11ea-8a1d-4bdf95167f26 + a90ec45c-fc34-11ea-87de-6b6a87aec61f + a90ee3f6-fc34-11ea-86a3-03d0ea6ff763 + a90f02e6-fc34-11ea-942e-5348b4593d9d + a90f24a6-fc34-11ea-8ebc-0fd8e82f00bc + a90f43be-fc34-11ea-b448-0b4457cb7a87 + a90f6326-fc34-11ea-8f07-c7d91abc8d45 + a90f841e-fc34-11ea-af99-238fefaddfaf + a90fa386-fc34-11ea-9aea-df50be628ac1 + a90fc6a4-fc34-11ea-8c29-57f26b20b4fa + a90fe6f2-fc34-11ea-98c4-7b2b9ef133ef + a9100786-fc34-11ea-8594-9b4f49877520 + a91024be-fc34-11ea-adb1-a3a70eb7151c + a91042dc-fc34-11ea-98f2-3ff2f81817a0 + a9106136-fc34-11ea-b0a9-931ee886d3dc + a9107ef0-fc34-11ea-b845-13014c6b8044 + a9109c78-fc34-11ea-9fed-f337db4545b7 + a910b852-fc34-11ea-a7f4-3fb597073d7a + a910d68e-fc34-11ea-87a4-17622f73163e + a910f3f8-fc34-11ea-bc4f-5399c70921eb + a91112c0-fc34-11ea-9f9f-c3be07c506cc + a9112fee-fc34-11ea-83ae-17b931b5e260 + a9114d6c-fc34-11ea-bc19-8377586d8a33 + a91169dc-fc34-11ea-bd5d-c7853fbce8ad + a9118674-fc34-11ea-a861-db768abc4640 + a911a3fc-fc34-11ea-b93e-c308019b631d + a911c3c8-fc34-11ea-a6f1-d7d46b68ac56 + a911e844-fc34-11ea-b228-d3d39aaafb81 + a91206f8-fc34-11ea-993b-03c00c5faaf2 + a912273c-fc34-11ea-a41b-333b44f1061f + a91245b4-fc34-11ea-ab7d-8f2f22a13998 + a9126508-fc34-11ea-9341-bf89c1ba439b + a91282e0-fc34-11ea-8a89-3b805528a9b7 + a9129e42-fc34-11ea-b4d4-531e9ea93120 + a912beae-fc34-11ea-b04d-4384e9c9debf + a912dcb8-fc34-11ea-9566-ab1a75170eda + a912f9a0-fc34-11ea-8692-5fda5fccddb6 + a9131854-fc34-11ea-9157-a7d67a10acbf + a9133816-fc34-11ea-8aa0-033b4e452e0b + a9135814-fc34-11ea-a150-cf407d873f31 + a9137574-fc34-11ea-a472-332ab5a58139 + a9139126-fc34-11ea-a1c3-c718ea3b0667 + a913afe4-fc34-11ea-9a1d-63c4a3efab90 + a913d30c-fc34-11ea-8e78-83785c3a5a21 + a913f102-fc34-11ea-9970-534818791732 + a9140eee-fc34-11ea-bd1f-233811440d52 + a9142d84-fc34-11ea-8aee-1b384e0e2521 + a9144c1a-fc34-11ea-b8c6-13b333608e75 + a91469fc-fc34-11ea-99cb-47d0e3ea90ac + a9148afe-fc34-11ea-b5f1-0758381ec56d + a914aa52-fc34-11ea-9184-f734182891e8 + a914c6d6-fc34-11ea-a7d9-cfc12cb37f05 + a914e724-fc34-11ea-95f0-3726ee119ece + a9150a60-fc34-11ea-98ec-275643b0b886 + a9152cf2-fc34-11ea-80c6-872b307ff148 + a9154bce-fc34-11ea-9f11-1f5443327211 + a9156abe-fc34-11ea-98d9-371860dcd87b + a9158b8e-fc34-11ea-b223-df0e39aeb801 + a915aaa6-fc34-11ea-b30a-5743d266600d + a915caae-fc34-11ea-870e-1b8434ffe3b0 + a915e994-fc34-11ea-8555-2bd32992fbba + a9160780-fc34-11ea-80a4-dfea112d9340 + a91626fc-fc34-11ea-bb2a-f7bbc9b00f2d + a916427c-fc34-11ea-b415-83d4f8ef67e1 + a91669e6-fc34-11ea-9a26-5bd65dc4dad6 + a9168804-fc34-11ea-bf63-43748dbcd555 + a916a668-fc34-11ea-9dc2-4bc03cf08b21 + a916c7f6-fc34-11ea-a072-0feaa724159d + a916e8c6-fc34-11ea-96ac-1307bc27ca15 + a9170c70-fc34-11ea-aec4-2342dde6aa1f + a9172df4-fc34-11ea-a341-a3bdd1c3f075 + a91752c0-fc34-11ea-89e8-d3e15c4c1f37 + a91772c8-fc34-11ea-9729-071aaabad301 + a91797da-fc34-11ea-ad89-b32a543aa2b1 + a917bae4-fc34-11ea-be32-a3e6ad09a2be + a917d8bc-fc34-11ea-a7a7-4b54e80c41db + a917f6c6-fc34-11ea-829c-2f35456dd70b + a918158e-fc34-11ea-9660-5307ef65ab6a + a91832d0-fc34-11ea-8f96-df3e68e1abfa + a9185120-fc34-11ea-a3f7-43c02b24a042 + a9186db8-fc34-11ea-9341-e33a8c459f66 + a9188b22-fc34-11ea-9690-834c57b19fb3 + a918a7a6-fc34-11ea-ba6e-d755f709eabc + a918c5c4-fc34-11ea-a217-5ff7fbc1bf49 + a918e4d2-fc34-11ea-9420-4f97fa7715b8 + a919011a-fc34-11ea-a206-7f264e00acf7 + a9191f06-fc34-11ea-b31a-df36cc1feb45 + a9193d38-fc34-11ea-8ed6-17d285390b51 + a9195b2e-fc34-11ea-9aa3-abd8bc5e42e0 + a9197b72-fc34-11ea-a485-fb717bba5e67 + a9199ab2-fc34-11ea-91de-bb0df768e2a1 + a919ba42-fc34-11ea-8772-b36a0e853c2f + a919d8c4-fc34-11ea-94f4-b30b44b7e73a + a919fad4-fc34-11ea-ade7-5f243bfc4cd8 + a91a1ce4-fc34-11ea-a017-fbab82068178 + a91a3b3e-fc34-11ea-a086-7f2a1f5172f4 + a91a58e4-fc34-11ea-90dd-6f4715ea9c1f + a91a7752-fc34-11ea-98b6-2bc02082990d + a91a9750-fc34-11ea-9be5-5796274c21a6 + a91ab51e-fc34-11ea-a41b-1fddac759e8a + a91ad404-fc34-11ea-9cc7-3b546c3351fd + a91af1e6-fc34-11ea-b8e2-b7d1893f7dc4 + a91b0e7e-fc34-11ea-8f40-73ef5f61c207 + a91b2cec-fc34-11ea-83ab-9b3a8efc5298 + a91b4902-fc34-11ea-86a2-f76e807cf91e + a91b67c0-fc34-11ea-ae7c-f3d1858b5281 + a91b85e8-fc34-11ea-9dd2-e363cff8719e + a91ba2d0-fc34-11ea-88fd-139ea05d6ae2 + a91bc120-fc34-11ea-bed6-ff46c0077ec7 + a91bdffc-fc34-11ea-82d2-232ee014b632 + a91bfe10-fc34-11ea-8964-a3ce0156773b + a91c1c6a-fc34-11ea-af7e-5371b1cf5cca + a91c40fa-fc34-11ea-925d-cfa056404112 + a91c608a-fc34-11ea-80fd-9f1a6650353d + a91c7fc0-fc34-11ea-b92a-0365adf2e84f + a91ca25c-fc34-11ea-ab9f-bb6352cd6be7 + a91cc174-fc34-11ea-b332-73113fd0b5a3 + a91cde84-fc34-11ea-a795-4b933a8e6797 + a91cfd74-fc34-11ea-9224-df151e879273 + a91d1d68-fc34-11ea-8837-e3f5dfbc2aab + a91d3f28-fc34-11ea-a93a-9f3b9da845c8 + a91d5b3e-fc34-11ea-b1ca-db18cd042f65 + a91d7920-fc34-11ea-b3cc-3375714c398d + a91d9842-fc34-11ea-afd4-0f30c6d9bfa9 + a91dba0c-fc34-11ea-93b3-3f9ff63d515d + a91dd82a-fc34-11ea-8a3b-c3964f08fa14 + a91df634-fc34-11ea-966c-13bfe69dae04 + a91e14ac-fc34-11ea-ac84-a3bd97f4921a + a91e3518-fc34-11ea-9ee2-afcdc2903082 + a91e53d6-fc34-11ea-98d2-db15c86660cb + a91e7820-fc34-11ea-978c-6f0d70d1c551 + a91e986e-fc34-11ea-95a4-b36ee7121d75 + a91eb858-fc34-11ea-9135-a3c8097a4e5b + a91edc48-fc34-11ea-ab2b-27a65278ef87 + a91efdb8-fc34-11ea-b021-4f121ae72c39 + a91f1d7a-fc34-11ea-b8bf-d3ea5fc87b9e + a91f4200-fc34-11ea-9828-0304dcfe73bd + a91f6172-fc34-11ea-8d1a-b31066b82b34 + a91f7fe0-fc34-11ea-8d3a-afd326f2a9b6 + a91f9c6e-fc34-11ea-8c3e-6722a1af472b + a91fb8b6-fc34-11ea-8a8e-e76d84db81fd + a91fd7a6-fc34-11ea-a67c-8373cb8f950d + a91ff4fc-fc34-11ea-8db9-ff40c1cf3114 + a9201298-fc34-11ea-b2ca-2f0540b32e15 + a92031c4-fc34-11ea-9f65-0be3f22bd20d + a9205212-fc34-11ea-a9b6-6779d6611f19 + a9207044-fc34-11ea-ae4b-d777c0cf9940 + a9208ec6-fc34-11ea-8381-4b0c94986567 + a920ab36-fc34-11ea-a39e-2331c56969c4 + a920c94a-fc34-11ea-991f-7f6f3a594a9f + a920e664-fc34-11ea-9fef-6776f5ac10a0 + a9210590-fc34-11ea-acbc-df8f483fbbb7 + a92123b8-fc34-11ea-90e4-2f7a223c0d37 + a92143a2-fc34-11ea-a08a-6f12cf6265d9 + a9216224-fc34-11ea-8ced-d7d1a36a8986 + a92183f8-fc34-11ea-ba76-cf0f73abb3bf + a921a0c2-fc34-11ea-a94e-0352020548a0 + a921c0ca-fc34-11ea-b37e-df7eb0eb5f53 + a921e0d2-fc34-11ea-9b02-872613fc74f9 + a921fd42-fc34-11ea-948a-672c7aea29b6 + a9221b2e-fc34-11ea-822c-b30b090a6a76 + a92239e2-fc34-11ea-9f95-eb688770292e + a92256d4-fc34-11ea-8a64-d32a308bacac + a92273c6-fc34-11ea-884a-ef083317a99b + a92293f6-fc34-11ea-ad3d-1b004db5aefa + a922b0ca-fc34-11ea-b09a-e71c65f30f28 + a922ce5c-fc34-11ea-815c-5bb0439b527d + a922ed74-fc34-11ea-aa48-4f265a9929ef + a9230ade-fc34-11ea-949b-5f94dbd62402 + a923279e-fc34-11ea-985d-fb5c14a4f007 + a9234436-fc34-11ea-81a7-7f72579caad5 + a9236182-fc34-11ea-8d4e-fb0f9399f2b7 + a9238554-fc34-11ea-8e0f-838f87f4d13b + a923a35e-fc34-11ea-ab2c-5f9eaf40c8de + a923c19a-fc34-11ea-aadf-c74971722075 + a923e10c-fc34-11ea-916f-433afbba0cd7 + a923fec6-fc34-11ea-b183-9b7246618dad + a9241e92-fc34-11ea-9b18-7f8c8c65690b + a9244354-fc34-11ea-a500-631fc0724039 + a9246488-fc34-11ea-8339-438f1ab1530c + a924845e-fc34-11ea-b4f4-275911f46a53 + a924a29a-fc34-11ea-8f27-171efdb331f0 + a924bf96-fc34-11ea-81ac-ff81eda63f5a + a924de04-fc34-11ea-9bc6-9b2e0903ee50 + a924fd62-fc34-11ea-8cf1-37d1e75b9fdc + a9251a40-fc34-11ea-a5ac-d3e791e5a754 + a925369c-fc34-11ea-aa10-53eab3f01124 + a925550a-fc34-11ea-8d8f-b354ae294e82 + a9257206-fc34-11ea-bada-df36fdeb27a3 + a9259042-fc34-11ea-ba4b-47808faf3500 + a925ad34-fc34-11ea-a3a1-6322a9c99ac7 + a925cc4c-fc34-11ea-a293-fb5afa16ad32 + a925ea24-fc34-11ea-9410-3b62dbc0c4c8 + a9260aae-fc34-11ea-92d4-27ceea1f5246 + a9262ffc-fc34-11ea-97f5-3b22d20545fa + a9264eb0-fc34-11ea-95e0-5bd01a37ee58 + a9266cb0-fc34-11ea-ba56-736a4e5cdbe2 + a9268f24-fc34-11ea-a09f-f73bc19e48e1 + a926b03a-fc34-11ea-8f19-1f2b040198ae + a926ce94-fc34-11ea-b2db-8bc0678e8e66 + a926eb18-fc34-11ea-8a38-778e879ee0fe + a9270846-fc34-11ea-a029-f756ad14cf00 + a9272664-fc34-11ea-ae5a-d7604621b308 + a9274392-fc34-11ea-b478-333a40128d9c + a9275f94-fc34-11ea-89c6-bfb5cd803433 + a9277ff6-fc34-11ea-bd62-1781e0bd74eb + a9279ef0-fc34-11ea-ae5a-bbd9ce5fb005 + a927bc64-fc34-11ea-9179-eb075fa8653c + a927daaa-fc34-11ea-b9ff-1f970ace1547 + a927f71a-fc34-11ea-a00c-2b6bbf090645 + a92812fe-fc34-11ea-a766-7f18cddebf10 + a92831d0-fc34-11ea-b6cd-333407d9f367 + a9284f94-fc34-11ea-aee9-a35768e89009 + a9286d94-fc34-11ea-8cae-e33108a1f842 + a928901c-fc34-11ea-a22a-dffbb8f1da94 + a928afca-fc34-11ea-a88c-f73aa45383e5 + a928d982-fc34-11ea-86c7-3bffa63ae861 + a928fb56-fc34-11ea-819b-df6d43701b2e + a9291c26-fc34-11ea-bbaa-c790aa350448 + a92940b6-fc34-11ea-acb2-9f65880d2e63 + a9296366-fc34-11ea-9b38-774a66ab22c3 + a9298292-fc34-11ea-b815-7b54a1890389 + a929a128-fc34-11ea-beac-67dad2aafed4 + a929bece-fc34-11ea-8670-5329df8b84d7 + a929dd28-fc34-11ea-8797-0b210a0f4b9b + a929f9de-fc34-11ea-9239-bfec162d8c38 + a92a172a-fc34-11ea-821b-736a3e0ddff9 + a92a35fc-fc34-11ea-b16a-6bbe23c08fda + a92a5384-fc34-11ea-9b09-4b8cab9b17f2 + a92a6f86-fc34-11ea-8b5e-4fa552a65619 + a92a8c46-fc34-11ea-babc-632b8eeade37 + a92aa960-fc34-11ea-8385-c36a9130e19c + a92ac558-fc34-11ea-a1f5-db6851dc122f + a92ae2b8-fc34-11ea-ac92-6f1c793822d1 + a92b0590-fc34-11ea-8a84-fbca6cff5158 + a92b2692-fc34-11ea-a886-b7a048a88bd1 + a92b45e6-fc34-11ea-881f-7785d55d806d + a92b656c-fc34-11ea-a4bc-1f301bd0eccd + a92b8a2e-fc34-11ea-a583-e32936caf36b + a92baba8-fc34-11ea-8291-db1843117763 + a92bc9f8-fc34-11ea-8681-1b2cf619321b + a92be6cc-fc34-11ea-91de-6f9acde96665 + a92c04f4-fc34-11ea-8225-17080af37b3e + a92c216e-fc34-11ea-92e0-4bb96a5b78cd + a92c3ed8-fc34-11ea-ad7e-87aeaa4e6b41 + a92c5c1a-fc34-11ea-9225-b73c9600cfb4 + a92c78a8-fc34-11ea-8bb7-3fe340fd9676 + a92c9716-fc34-11ea-8cbd-6f21b1c07fac + a92cb3e0-fc34-11ea-b3ad-5fe335a98b18 + a92cd0e6-fc34-11ea-b109-17b9313f29c2 + a92ceed2-fc34-11ea-84ca-f7f57695f914 + a92d0da4-fc34-11ea-ab55-67de0723d772 + a92d2bc2-fc34-11ea-b624-6fbf8233cfb8 + a92d4922-fc34-11ea-a010-4bbbab11500d + a92d6754-fc34-11ea-a000-b3e94438d2a0 + a92d8518-fc34-11ea-8e7e-f3cb64531090 + a92da6b0-fc34-11ea-adc1-2305e5ad0b93 + a92dc62c-fc34-11ea-acb1-4f1faf458549 + a92de5ee-fc34-11ea-a148-c78b3b5ca908 + a92e065a-fc34-11ea-a57a-f79386154a24 + a92e2496-fc34-11ea-8bab-7f77b5c748e4 + a92e444e-fc34-11ea-8435-1b26245713ef + a92e6424-fc34-11ea-bc80-cbfeee63ed94 + a92e809e-fc34-11ea-9a3e-db290eb483f6 + a92e9e6c-fc34-11ea-a940-2fb693564d66 + a92ebc08-fc34-11ea-b6a5-b3d3f98afefd + a92edbde-fc34-11ea-9fa8-a317127c453b + a92ef8d0-fc34-11ea-88dd-632fb480406e + a92f16da-fc34-11ea-8b2e-27b3c6fb0352 + a92f3570-fc34-11ea-9da5-5ba5229d3031 + a92f550a-fc34-11ea-a32a-6f3dc5734f06 + a92f7404-fc34-11ea-a5a7-0f78884649ea + a92f9240-fc34-11ea-b600-e307b5606723 + a92fb36a-fc34-11ea-9aa4-5f6b4f0b2ccb + a92fd21e-fc34-11ea-8151-f762a21dfe71 + a92fef10-fc34-11ea-9822-47778ede22a3 + a9300ad6-fc34-11ea-b339-6f0f7cb92694 + a9302dc2-fc34-11ea-9ca3-ab4b8a539fed + a9304d84-fc34-11ea-9d57-1f494a36baf9 + a9306cd8-fc34-11ea-81fb-33f8f9bbe0ed + a9308b96-fc34-11ea-869c-6727c2d97398 + a930a9a0-fc34-11ea-b291-6b9646b5e5b6 + a930c7b4-fc34-11ea-b244-a77bb67c7914 + a930e564-fc34-11ea-b60a-4bc97ecfd33f + a93103c8-fc34-11ea-b2c6-3fa51a0ffcc3 + a9312042-fc34-11ea-b7ed-b3dbfb9a6604 + a9313eba-fc34-11ea-855f-0796477bdb3f + a9315d50-fc34-11ea-bd54-4b26ea6fc75d + a9317984-fc34-11ea-8f66-8fff6617e4bb + a93197ca-fc34-11ea-85a1-37fc670eb24a + a931b732-fc34-11ea-95e4-2b35825516bb + a931d4d8-fc34-11ea-8332-3b919b7cdc87 + a931f4ae-fc34-11ea-99b3-232ab15bb03f + a9321240-fc34-11ea-81c7-0f125a6e66d8 + a932357c-fc34-11ea-ac47-67dd1bbe3e4a + a93254da-fc34-11ea-8dfe-6fe8730cd2c6 + a9327104-fc34-11ea-8003-17fb00e20c3a + a9328fb8-fc34-11ea-a12a-2f152ffe72d2 + a932af16-fc34-11ea-8c96-8b35fbb5bb29 + a932cde8-fc34-11ea-ad15-07d975e8b2f3 + a932ec60-fc34-11ea-a21b-b79313d54ed9 + a9330ede-fc34-11ea-9438-f7f6da846ae0 + a9333396-fc34-11ea-945f-cfeb38641d2c + a9335402-fc34-11ea-b38d-b37147052df7 + a9337554-fc34-11ea-a568-8f5aaa7d667f + a9339368-fc34-11ea-8d18-0ff56f00eb22 + a933af92-fc34-11ea-9b15-eb38b9b34105 + a933cd4c-fc34-11ea-86b3-3b62b236441f + a933eb9c-fc34-11ea-9e45-4f2df32dfc06 + a9340924-fc34-11ea-9a52-4fffbf0482c0 + a934268e-fc34-11ea-b81f-43bef42a15b5 + a934445c-fc34-11ea-8e95-b7120a2822e4 + a9346356-fc34-11ea-8f8f-4fe800fadfe2 + a93480e8-fc34-11ea-94f8-43335a3a50bd + a9349e2a-fc34-11ea-9c6e-abed9bd2da08 + a934bbee-fc34-11ea-86c1-dfbb1e4e80cc + a934db60-fc34-11ea-bcf7-6bd9b143dae6 + a934fbfe-fc34-11ea-8933-4b19f11616a0 + a93518f0-fc34-11ea-bd5a-3f32f7ab38b9 + a9353592-fc34-11ea-a7bc-af522f1721d0 + a93556d0-fc34-11ea-adf0-d3b370ed78fc + a93579a8-fc34-11ea-8e80-bb8fc926c8dc + a9359992-fc34-11ea-b8d7-8766d070ca3d + a935bf12-fc34-11ea-8076-5ba1feb70d7f + a935e802-fc34-11ea-aa40-576b1e62a6c5 + a9360ec2-fc34-11ea-b8b1-73dc077485e7 + a9363640-fc34-11ea-abd5-cb7ae321a033 + a936571a-fc34-11ea-9bdb-bf9ceca2a353 + a9367b82-fc34-11ea-a9e4-7f51db61dd52 + a936a1ac-fc34-11ea-bd98-3b1536b03c1d + a936c3c6-fc34-11ea-b769-e382a75ed8d0 + a936e252-fc34-11ea-9094-b32fc62849d9 + a9370ab6-fc34-11ea-84dd-433c349a9be0 + a9373086-fc34-11ea-8750-6339146b9e7e + a9375098-fc34-11ea-8dc9-6bb90fa01db8 + a937721c-fc34-11ea-a065-13e904a2de4e + a93790bc-fc34-11ea-9941-bbd41551aee1 + a937ae1c-fc34-11ea-a111-53d41ee116aa + a937e936-fc34-11ea-8833-1b6692a0e641 + a9381172-fc34-11ea-b031-13ff30894104 + a9383904-fc34-11ea-8dff-c3ea8f40bbee + a9385c40-fc34-11ea-a149-63bb2fc89199 + a938821a-fc34-11ea-9531-8fc05220ff04 + a938abc8-fc34-11ea-8e7f-6374cf8cbbb9 + a938cf72-fc34-11ea-858a-6beddc19a74e + a938f45c-fc34-11ea-92de-373358c78c75 + a93917de-fc34-11ea-b675-436cb0f4d200 + a9393fc0-fc34-11ea-b3c5-4b605f4ac3a6 + a939604a-fc34-11ea-8d86-7fd0c3c9fed3 + a9398124-fc34-11ea-88e6-3fb09cf368a8 + a939a258-fc34-11ea-a765-7333f9cd9b7b + a939c116-fc34-11ea-98ca-2770acb48937 + a939dfe8-fc34-11ea-a6d8-4fed9af3b39b + a939fe74-fc34-11ea-a594-4769e717e686 + a93a1a94-fc34-11ea-b85c-833b1c6d5f15 + a93a377c-fc34-11ea-8e86-f337a95a9d8e + a93a5518-fc34-11ea-813f-4b8109a1a288 + a93a728c-fc34-11ea-b7ce-5f31ded41050 + a93a9258-fc34-11ea-a97f-cb19b5560b80 + a93ab0d0-fc34-11ea-ac74-5f4af29f5408 + a93ad506-fc34-11ea-b621-6740268a13e0 + a93af464-fc34-11ea-babf-3b7d77dd993e + a93b119c-fc34-11ea-8406-cf7b358fb7a1 + a93b2f38-fc34-11ea-ae38-7f3c99b0678e + a93b4c48-fc34-11ea-b5d4-8bad8a4b5a41 + a93b69f8-fc34-11ea-891d-bf2bee9a8b73 + a93b897e-fc34-11ea-8e16-93e030b2a94a + a93ba6f2-fc34-11ea-bf81-333cf7ed09fa + a93bc6e6-fc34-11ea-a3fb-df0f7f598699 + a93bebb2-fc34-11ea-89f1-53b6ffbb2238 + a93c0bf6-fc34-11ea-9db1-a37b215470d5 + a93c2f32-fc34-11ea-b05f-07493ff8b8d4 + a93c4efe-fc34-11ea-9349-bffeb5d8547e + a93c6f06-fc34-11ea-8437-d781d9a8f20d + a93c91c0-fc34-11ea-8e7d-9f6d5e222115 + a93cb95c-fc34-11ea-a4b4-8fb496086384 + a93cf6f6-fc34-11ea-87a5-ab2b5deb7dea + a93d3490-fc34-11ea-909b-fb044aafc8f1 + a93d6ab4-fc34-11ea-b3e6-6fa5ca6e0957 + a93d8dc8-fc34-11ea-8030-2b17ab6c541c + a93dad58-fc34-11ea-a051-43bc532061e4 + a93dd1c0-fc34-11ea-87f6-6ff5e5757fdd + a93df11e-fc34-11ea-a2f3-4fa7ee7ec01f + a93e0e92-fc34-11ea-9cbc-a313bd002e6d + a93e2cce-fc34-11ea-bfc2-bb37481fc7d2 + a93e4a38-fc34-11ea-9a3b-77b15dedd406 + a93e672a-fc34-11ea-900a-7bf052570f80 + a93e8282-fc34-11ea-aa4c-236c7fc202f4 + a93ea1c2-fc34-11ea-83e4-e754cf426c9f + a93ebee6-fc34-11ea-b665-93b43e82002c + a93edcb4-fc34-11ea-aa97-af2bc08393d7 + a93efb54-fc34-11ea-afa4-57aa48e06966 + a93f1b02-fc34-11ea-abde-7f7d3c2074a9 + a93f37b8-fc34-11ea-9871-973534a3d817 + a93f56c6-fc34-11ea-9a8f-8f5190320177 + a93f7746-fc34-11ea-9ec0-079ec8fe7a38 + a93f9686-fc34-11ea-8bc2-1304088ed674 + a93fb60c-fc34-11ea-83d7-2707d16d0cf3 + a93fda24-fc34-11ea-b08a-87caf1cc1259 + a93ffce8-fc34-11ea-9511-47f22251be2c + a9401d0e-fc34-11ea-a47c-ff4b9a973e8b + a9403b2c-fc34-11ea-b506-636025911ca9 + a940574c-fc34-11ea-8b7a-cbfdb165f2be + a94077b8-fc34-11ea-8e0a-63064e9e0759 + a940969e-fc34-11ea-b1af-ef249da73540 + a940b3a4-fc34-11ea-877b-1fb65e985825 + a940d28a-fc34-11ea-88bf-77afabbab811 + a940f3c8-fc34-11ea-8d2b-375e0423a9e8 + a9411196-fc34-11ea-a742-8b277033f114 + a9412e7e-fc34-11ea-9204-7b49613ac90d + a9414ca6-fc34-11ea-b5b9-b3b560596335 + a9416858-fc34-11ea-a5d3-fbb56f8190c1 + a9418450-fc34-11ea-bf0a-c778edcda5b9 + a941a264-fc34-11ea-926b-4735522bab2f + a941be98-fc34-11ea-ab2b-5f7e62b97cc2 + a941ddd8-fc34-11ea-80f4-a744fcfdb54f + a941fcdc-fc34-11ea-a880-f392bec7e777 + a9421b0e-fc34-11ea-a56c-cf1cbe69bab6 + a9423a1c-fc34-11ea-a523-676e4d2e0d7b + a9425e52-fc34-11ea-9601-6b45b4763a6f + a942808a-fc34-11ea-8240-c7202e7578fc + a942a11e-fc34-11ea-b6b1-bf64ca06c321 + a942c072-fc34-11ea-bbc0-afb723ec53c7 + a942dfda-fc34-11ea-a6c2-a71c800ff161 + a942fdbc-fc34-11ea-ab67-bfaffeda419d + a9431950-fc34-11ea-aa1d-f7b86e4fd0d1 + a94338fe-fc34-11ea-9d3c-0394abe4a50c + a9435758-fc34-11ea-919b-7ff3dbe13a40 + a9437486-fc34-11ea-a1ab-073118ae2d35 + a9438fc0-fc34-11ea-b074-a7a3c130cd65 + a943ad16-fc34-11ea-b23d-735b12462f2b + a943cab2-fc34-11ea-b422-3f22ced27018 + a943e916-fc34-11ea-9b8a-c3173d2580e6 + a94407a2-fc34-11ea-a613-57cc6ec16ba4 + a94424ee-fc34-11ea-b75a-734482496712 + a94441fe-fc34-11ea-89a6-1b90ae4458fe + a9445e50-fc34-11ea-9135-a7158de0fe4a + a9447d7c-fc34-11ea-a3b2-678e6bea0772 + a9449c80-fc34-11ea-a744-f7ea7ba16936 + a944c03e-fc34-11ea-a828-bb196a793849 + a944e082-fc34-11ea-be63-dbcc5ce0acfc + a94500a8-fc34-11ea-a2c5-b77ee4eac220 + a945254c-fc34-11ea-992c-cfd8e7244199 + a9454734-fc34-11ea-8ee4-db1f54cc0412 + a9456ac0-fc34-11ea-abc7-a37cd38c9009 + a9458abe-fc34-11ea-a2e3-7bf4776f4889 + a945a698-fc34-11ea-ac57-6ff96b8f92d0 + a945c506-fc34-11ea-a57c-8f67f3d85580 + a945e338-fc34-11ea-b742-4f8145562885 + a9460750-fc34-11ea-aa9c-7371dd4b9c31 + a9462686-fc34-11ea-975a-172d0cca6d89 + a9464544-fc34-11ea-9535-af934c6d7f7a + a946638a-fc34-11ea-a66e-6b5ece00be14 + a94680cc-fc34-11ea-96cd-d3f41bca855a + a9469e9a-fc34-11ea-970d-d3644458a0f2 + a946bb3c-fc34-11ea-9ce4-ff768c5ba25a + a946d9b4-fc34-11ea-941b-dfca20e4016b + a946f8ae-fc34-11ea-895e-4f3963fcb9e5 + a947173a-fc34-11ea-be43-8773577d560b + a947354e-fc34-11ea-834b-ab6260372d97 + a94758d0-fc34-11ea-ab20-77385732ee6d + a9477b8a-fc34-11ea-9710-97bfb254f476 + a9479a3e-fc34-11ea-b99e-6fe69dac9b33 + a947b906-fc34-11ea-82e4-bbfb15cc25d2 + a947d79c-fc34-11ea-9834-c71b6c2f94c2 + a947f650-fc34-11ea-a26b-e333e27661e1 + a9481536-fc34-11ea-a47c-a3a68a2c7233 + a948343a-fc34-11ea-99fc-7764579c9468 + a9485190-fc34-11ea-983c-477f760b6423 + a9486e1e-fc34-11ea-bb1f-43d724cfe14b + a9488e26-fc34-11ea-af10-a322c45129f9 + a948abd6-fc34-11ea-a7b6-a766592925bf + a948c8aa-fc34-11ea-85ec-e7195b94914f + a948e592-fc34-11ea-9f59-e3ed20e7c63b + a9490310-fc34-11ea-9f80-cbda697d20ca + a94922aa-fc34-11ea-b40c-4b24a0805a61 + a9494046-fc34-11ea-b7fc-bf462bc473b2 + a9495c20-fc34-11ea-a9c5-1bcf323c9199 + a9497a2a-fc34-11ea-9a5c-dbba86865f79 + a9499668-fc34-11ea-875a-4bc72049e297 + a949ba4e-fc34-11ea-89c2-9bb6583d6a26 + a949dbdc-fc34-11ea-970c-7f27aa41342c + a949fbb2-fc34-11ea-8e11-8b97f801e613 + a94a1ce6-fc34-11ea-8043-039054d0fe90 + a94a4130-fc34-11ea-ba98-539e588828ab + a94a62fa-fc34-11ea-abf5-07c99f54a902 + a94a81d6-fc34-11ea-b26e-6f75349bbee7 + a94a9fc2-fc34-11ea-b5e1-dbd945aa3eaa + a94abfc0-fc34-11ea-ad87-cfa7c5404c4e + a94adf6e-fc34-11ea-948f-33d0d30b88bd + a94afd50-fc34-11ea-8f90-9370cee2fe89 + a94b18ee-fc34-11ea-bf73-0fd9fc47fca7 + a94b377a-fc34-11ea-a76a-b704e0cd3960 + a94b5840-fc34-11ea-9f88-eb56cee31089 + a94b77a8-fc34-11ea-80d9-c71d8322dc66 + a94b9724-fc34-11ea-a20e-a72bd048ca5d + a94bb42a-fc34-11ea-b12b-0bf24287e2da + a94bd20c-fc34-11ea-b476-97ee7ed1c9fd + a94bf016-fc34-11ea-9119-e7ce8f0fb4da + a94c0ef2-fc34-11ea-b2a9-5397c4430203 + a94c2d2e-fc34-11ea-af46-53f95d0baf41 + a94c4b24-fc34-11ea-a4ec-831e91542d81 + a94c6eba-fc34-11ea-adce-035c70a757bd + a94c90b6-fc34-11ea-a76f-3377854b44a8 + a94cb5d2-fc34-11ea-a519-ef0c761b1cb3 + a94cd616-fc34-11ea-bd0d-0ffb2c829b93 + a94cf466-fc34-11ea-90c6-2f7fa7d47585 + a94d148c-fc34-11ea-b514-a75ea4cec6b7 + a94d35fc-fc34-11ea-8961-fbd2d640a735 + a94d54e2-fc34-11ea-b41e-ebb8c875363b + a94d72b0-fc34-11ea-90e0-2f8e8157ca9a + a94d90d8-fc34-11ea-9bad-b34a1f1a9da7 + a94db0a4-fc34-11ea-8060-83cc5042f1fd + a94dce4a-fc34-11ea-8f13-83d1ed8e7743 + a94dea38-fc34-11ea-95e4-83b964853405 + a94e0b4e-fc34-11ea-bad7-a727da88f4bd + a94e2a52-fc34-11ea-84c6-8b42511be182 + a94e4726-fc34-11ea-a7b4-47de4807a227 + a94e6bfc-fc34-11ea-9041-9f491be79bdc + a94e8a10-fc34-11ea-8198-d3491ee38908 + a94ead6a-fc34-11ea-b91b-5fb64ae87ce0 + a94ecd04-fc34-11ea-82d5-97485be33bad + a94eecbc-fc34-11ea-9395-9bde8670b047 + a94f0fe4-fc34-11ea-a719-3b0fdaadf817 + a94f312c-fc34-11ea-824f-1723b3382c20 + a94f535a-fc34-11ea-af34-b77a026ce4fe + a94f7286-fc34-11ea-b77b-cb39a623ab15 + a94f90c2-fc34-11ea-8181-1fe5b714c986 + a94fad3c-fc34-11ea-826e-0fefa98a7e99 + a94fcb14-fc34-11ea-8c8d-c302cfa1e4ac + a94fe978-fc34-11ea-8ae8-bf83147f36bd + a950069c-fc34-11ea-aaf1-e75ed04a52a3 + a95023c0-fc34-11ea-a1c7-bfb2bd85ac47 + a9504224-fc34-11ea-b534-c37296cca7ce + a9505e12-fc34-11ea-b6d0-d7fd50233518 + a9507cda-fc34-11ea-926e-43b5f0fa0e87 + a95098c8-fc34-11ea-b825-731dae57af8e + a950b448-fc34-11ea-b5ba-d3b729a203fb + a950d1da-fc34-11ea-8819-dfda2e1ed08e + a950f282-fc34-11ea-b67d-0f98a7cd93ad + a9510efc-fc34-11ea-a44a-979868d12eb0 + a9512c5c-fc34-11ea-be76-27595217da2d + a9514cdc-fc34-11ea-8b9d-a768fa014527 + a9516c6c-fc34-11ea-8309-7b8d24416855 + a9518fd0-fc34-11ea-bbec-4be6fe2246e7 + a951b0e6-fc34-11ea-a17c-3b284f7c74fe + a951d06c-fc34-11ea-9d3a-6fa90f416c76 + a951ee6c-fc34-11ea-b03f-8f9f5f95c5dd + a9520dfc-fc34-11ea-9c39-83cc4b2f3efd + a9522d32-fc34-11ea-8545-87e7b693c74c + a9524d26-fc34-11ea-a4ec-b7ccc09873d8 + a9526af4-fc34-11ea-8983-2b031d9e8de8 + a9528ad4-fc34-11ea-b3ae-5bf186aed9c5 + a952a7c6-fc34-11ea-9464-abc0cbf030fd + a952c648-fc34-11ea-8d83-87c38b1498ca + a952e42a-fc34-11ea-ae73-2f4857d6f7f6 + a953031a-fc34-11ea-8d62-cfc7b7ec52ed + a9532250-fc34-11ea-977d-eb8cda9aca08 + a9533e20-fc34-11ea-a195-73420eb57704 + a9535c5c-fc34-11ea-9194-67276fc9d9c2 + a9537c5a-fc34-11ea-a955-5f2757070df4 + a9539960-fc34-11ea-8656-27450c0ba989 + a953b986-fc34-11ea-a318-b73b39606367 + a953da4c-fc34-11ea-93eb-7bf939408cc4 + a953fa2c-fc34-11ea-b661-ebf3068cfa27 + a9541890-fc34-11ea-9c2b-736783193bac + a9543762-fc34-11ea-a402-6757db3136e3 + a954565c-fc34-11ea-846a-5f6353f3d8e1 + a95476e6-fc34-11ea-bce4-83f8cf06850d + a9549b8a-fc34-11ea-a518-47de1b6d9a0b + a954bb60-fc34-11ea-91be-f7b2119e4a9d + a954d9a6-fc34-11ea-bce1-efae9c3147e5 + a954f814-fc34-11ea-b95e-a3732c3c4a38 + a955154c-fc34-11ea-b676-db654300f0a9 + a95531d0-fc34-11ea-8cbb-13f143118f45 + a9554f6c-fc34-11ea-a59e-b7988594ee2e + a9556bf0-fc34-11ea-8253-f303583bc5fb + a9558900-fc34-11ea-b884-3fc149ff8c09 + a955a91c-fc34-11ea-a6c5-cba1b8741ea8 + a955c6cc-fc34-11ea-b31b-5781b857bd8d + a955e40e-fc34-11ea-a813-a3217aeb8f29 + a95600e2-fc34-11ea-9dab-dbec2fab9ac6 + a9561eec-fc34-11ea-8fd6-af9715f0521c + a9563d0a-fc34-11ea-a012-437d407cdfd9 + a95659e8-fc34-11ea-a3a3-371209074588 + a956766c-fc34-11ea-8988-4b560d9f1026 + a95694da-fc34-11ea-8866-67b760a0f2b0 + a956b46a-fc34-11ea-b42c-1365a2f29a52 + a956d8fa-fc34-11ea-94e0-b38122e9319e + a956f894-fc34-11ea-95d2-5fd835247ec6 + a95716e4-fc34-11ea-906f-a7d5d29f7114 + a95735ca-fc34-11ea-afbb-5f00343ef365 + a95754ce-fc34-11ea-80d1-e354fc522eb8 + a95773d2-fc34-11ea-bbdb-df57ca86c417 + a9579358-fc34-11ea-baad-f7b583f15281 + a957b09a-fc34-11ea-91b3-4b03789dcbf8 + a957cf12-fc34-11ea-9f00-7f8523c01f76 + a957ec0e-fc34-11ea-81b8-5b1d326754c3 + a958095a-fc34-11ea-a3d5-235aa86e090f + a9582610-fc34-11ea-849f-efd179009420 + a95842ee-fc34-11ea-a84b-d358e4984b33 + a95863d2-fc34-11ea-b580-1b80fb5a6566 + a958818c-fc34-11ea-be8f-27e082c36b8e + a958a13a-fc34-11ea-8924-ffe0703c3cac + a958bf6c-fc34-11ea-8ea9-73f520b7bd8e + a958de16-fc34-11ea-8e61-271ca304d21c + a958fc70-fc34-11ea-9bc9-a3a10cb667e9 + a9591ab6-fc34-11ea-9d85-eb8823472398 + a9593ed8-fc34-11ea-a9dc-ab6b7024fe65 + a95963f4-fc34-11ea-91fb-4b3d52393021 + a95984ba-fc34-11ea-82a4-ef52567604b7 + a959a4ae-fc34-11ea-9828-f7d19e667106 + a959c178-fc34-11ea-b374-f796e62512b8 + a959dcda-fc34-11ea-87ec-4f2d21335163 + a959faee-fc34-11ea-be85-bb2a68c9f109 + a95a1aba-fc34-11ea-adb2-136579d0f3c5 + a95a3a22-fc34-11ea-90f3-1b5b0183c80a + a95a5750-fc34-11ea-bb1a-1b3b8f6d4c22 + a95a750a-fc34-11ea-80a6-ebda2ad68a4c + a95a921a-fc34-11ea-920d-2f74597ab1c9 + a95aaf98-fc34-11ea-ac8e-17dd280728d7 + a95accc6-fc34-11ea-84b8-d34ff61191f1 + a95aebac-fc34-11ea-988a-875e76d72da1 + a95b0858-fc34-11ea-9300-8f26d9a15ee3 + a95b22b6-fc34-11ea-9237-43971fc0aa3a + a95b4228-fc34-11ea-bff8-b37e1b55cc10 + a95b617c-fc34-11ea-aa31-03d88a190146 + a95b81e8-fc34-11ea-9ba2-1f6d96ecd7a0 + a95ba11e-fc34-11ea-bd1a-37535cb0ade4 + a95bc072-fc34-11ea-b77b-b30e02330715 + a95be49e-fc34-11ea-bd27-fb9afa6dadfd + a95c0456-fc34-11ea-9c15-871c09583a36 + a95c230a-fc34-11ea-a037-07a10217bfc3 + a95c4240-fc34-11ea-8246-234162313479 + a95c60a4-fc34-11ea-a69b-1fcb17605398 + a95c8264-fc34-11ea-ac44-8beb4630fec4 + a95ca064-fc34-11ea-acbe-eb33ad919ef6 + a95cbcde-fc34-11ea-be52-371cbf4e5c56 + a95cdb9c-fc34-11ea-ba7c-2fb5e103359b + a95cf8e8-fc34-11ea-a1a5-a7bbddf1ccae + a95d1652-fc34-11ea-accf-476c79a3f616 + a95d35d8-fc34-11ea-ad72-2f0f622a4129 + a95d557c-fc34-11ea-a094-0fe7db806cc6 + a95d7246-fc34-11ea-98e4-e74d40dc1c67 + a95d90a0-fc34-11ea-bbd0-43869a1920e8 + a95dafa4-fc34-11ea-9e98-a744c92667a4 + a95dcf8e-fc34-11ea-af08-affb23440399 + a95deb68-fc34-11ea-9ba3-6bffc4f8b55d + a95e0850-fc34-11ea-aa4f-3f253e5f774c + a95e2786-fc34-11ea-b66f-fb4565d75626 + a95e51b6-fc34-11ea-9b40-ab2019a7b123 + a95e727c-fc34-11ea-8714-8fb8235eebcf + a95e91a8-fc34-11ea-abff-a7394e8b3d99 + a95eb2e6-fc34-11ea-a6ae-63ec3829ee30 + a95ed104-fc34-11ea-bf67-6fc8d1c6f71f + a95eef18-fc34-11ea-b463-e33edd7a6ddc + a95f0be2-fc34-11ea-b5e1-97f859c3f988 + a95f28ca-fc34-11ea-b0a4-9b2d8ef1418a + a95f45a8-fc34-11ea-b78b-1b630826aa7c + a95f63e4-fc34-11ea-b655-c3eaf331e116 + a95f8252-fc34-11ea-bdfd-3fa7cc48d2d7 + a95f9f8a-fc34-11ea-b556-9f1753add8a1 + a95fbe7a-fc34-11ea-bfcb-5b489d3f80d7 + a95fdea0-fc34-11ea-b8bf-7b3449b74037 + a95ffe58-fc34-11ea-b5ad-bfcc9932e61d + a9601d0c-fc34-11ea-9097-ef90bbd527d1 + a9603c38-fc34-11ea-84ff-53aeea1a6b21 + a96059d4-fc34-11ea-b6cf-ebbb58357e97 + a9607630-fc34-11ea-8c2b-a7f990972552 + a96092be-fc34-11ea-9369-07eb8c46c8dc + a960b5b4-fc34-11ea-97fa-fb99e0fa7d16 + a9617396-fc34-11ea-bc06-538220921ec5 + a961936c-fc34-11ea-904d-7bed7b7f7448 + a961afdc-fc34-11ea-9ecc-df3bc94c0173 + a961cfda-fc34-11ea-af32-c7e5a3d43100 + a961ec2c-fc34-11ea-8e0e-af4f63a97ed6 + a96208c4-fc34-11ea-813f-03f193379a20 + a96228ea-fc34-11ea-8486-8743d1e67db3 + a96245fa-fc34-11ea-821f-bb65e2272ad9 + a96261ac-fc34-11ea-9a12-6758a26e489a + a9627f02-fc34-11ea-88be-bf0dfb949479 + a9629ee2-fc34-11ea-a17d-e78d01bfbf61 + a962be72-fc34-11ea-8823-63e10bd7c858 + a962db28-fc34-11ea-aaf7-4368b0155e7c + a962f9d2-fc34-11ea-b1a7-c302a326425c + a96317c8-fc34-11ea-9ab7-af7a5b70ee6c + a9633b90-fc34-11ea-bfb5-d774222823c0 + a9635ba2-fc34-11ea-855d-df4b9a110cae + a9637dd0-fc34-11ea-9e09-73b0e88031ff + a9639a90-fc34-11ea-9cf4-4b9d685f4683 + a963bc0a-fc34-11ea-807d-936932fa263c + a963dca8-fc34-11ea-9bc7-eb872b1f6cc2 + a963fada-fc34-11ea-8559-cf983cfb2203 + a9641880-fc34-11ea-8c18-636ca846a4a8 + a96436da-fc34-11ea-aa7e-07c6bf739029 + a96453fe-fc34-11ea-b206-0b8337339b20 + a96471fe-fc34-11ea-8299-53ad9378dede + a9649076-fc34-11ea-a0a0-6bfaa19afbbf + a964ad22-fc34-11ea-b1ea-af29eb177990 + a964ca14-fc34-11ea-b64f-6326f3fb3ea1 + a964e81e-fc34-11ea-9518-7f09cf820c88 + a96504fc-fc34-11ea-b8ee-23ff489351e5 + a965227a-fc34-11ea-939e-0f670cd52f6f + a96541d8-fc34-11ea-8a67-3bed547aa4fc + a9655f4c-fc34-11ea-922e-c73809dfb337 + a9657c02-fc34-11ea-b839-6f12a72d8d9c + a9659994-fc34-11ea-a4d1-3bdd1526caab + a965bc1c-fc34-11ea-8079-938a61e9fd72 + a965dd8c-fc34-11ea-9f16-cfb2f2c07544 + a965fdf8-fc34-11ea-a2ac-d36165eef523 + a96622d8-fc34-11ea-9565-a33e77c56f83 + a96642ae-fc34-11ea-ac27-ab31739e04d7 + a96660fe-fc34-11ea-837e-4fd8d9583abb + a96681ec-fc34-11ea-87bc-0bbbf8f8399c + a966a0be-fc34-11ea-af62-a3d2b61e1689 + a966be14-fc34-11ea-8aea-9386e0f83af4 + a966da48-fc34-11ea-bb07-bfd686f043aa + a966f9f6-fc34-11ea-8a52-c3d38c6da059 + a9671af8-fc34-11ea-b2dd-67a820145a80 + a96737cc-fc34-11ea-a0c6-07a06b1d05b0 + a9675568-fc34-11ea-8376-73e809d300e9 + a967732c-fc34-11ea-86e2-232484f03722 + a9679014-fc34-11ea-8b06-2ba7a18aedc0 + a967acde-fc34-11ea-ad50-531cfb6e0586 + a967cae8-fc34-11ea-be5c-7b8148530bee + a967e744-fc34-11ea-a684-cf3eac03643f + a968092c-fc34-11ea-aa0e-4fd105bb6255 + a9682790-fc34-11ea-b272-f763f4dad936 + a9684518-fc34-11ea-9c16-27003a6c4792 + a96864bc-fc34-11ea-a939-b739405c5f3e + a96882e4-fc34-11ea-8f1b-ff76c5abff35 + a968a242-fc34-11ea-aadb-1b5c06d4c426 + a968c664-fc34-11ea-b579-832a8faff842 + a968eb08-fc34-11ea-984e-5f8ed8d3c250 + a96909c6-fc34-11ea-994d-ef845c4efa48 + a969299c-fc34-11ea-8abb-0302db644d37 + a969486e-fc34-11ea-9815-d3fa5fee230a + a96967ae-fc34-11ea-a3bb-fb4ddc1da13c + a969864e-fc34-11ea-8427-47505ad4c2f1 + a969a390-fc34-11ea-b646-cbe964ded34b + a969c24e-fc34-11ea-889c-b369babe45a5 + a969dea0-fc34-11ea-b606-d3674b5867d7 + a969fb38-fc34-11ea-991a-0b9947cafd48 + a96a1a6e-fc34-11ea-8e61-ff526850e3e7 + a96a37ba-fc34-11ea-af12-076fa0fd9a9b + a96a55ce-fc34-11ea-a115-bbc39d183623 + a96a734c-fc34-11ea-962f-bf91bb5390f0 + a96a90e8-fc34-11ea-bdb3-671b5a2d6ec7 + a96ab2da-fc34-11ea-adec-cf0cef060f66 + a96ad238-fc34-11ea-991c-f385e7feedf6 + a96af3d0-fc34-11ea-ac9f-67d2ae249030 + a96b11a8-fc34-11ea-a710-a32c06edaa1b + a96b3570-fc34-11ea-80e9-afe0f767f6a1 + a96b5690-fc34-11ea-9ec5-e32cd8d95689 + a96b75c6-fc34-11ea-98bb-f77714f96752 + a96b93c6-fc34-11ea-a84c-3787b5c11e25 + a96bb040-fc34-11ea-bcbb-57378bfa8783 + a96bce90-fc34-11ea-a19a-cb866a75003f + a96bec5e-fc34-11ea-a486-4303ef387922 + a96c0ab8-fc34-11ea-b1d2-ebfaef83997f + a96c27be-fc34-11ea-9b2c-a38b9f452547 + a96c4424-fc34-11ea-ad3b-8f0c7ffb236a + a96c610c-fc34-11ea-bd42-ef40d9b11b06 + a96c7e4e-fc34-11ea-80c9-af0ff6f72f47 + a96c9b86-fc34-11ea-8649-674478838a9c + a96cba80-fc34-11ea-b8ea-ebc868e59bd5 + a96cda56-fc34-11ea-bca4-4f0451db38cb + a96cf72a-fc34-11ea-9d9c-17c3dc969b48 + a96d15d4-fc34-11ea-ac21-8727217d946c + a96d388e-fc34-11ea-8a60-471de4f91924 + a96d58aa-fc34-11ea-968a-fb643af1b282 + a96d788a-fc34-11ea-90b6-7fe7ee60c063 + a96d96ee-fc34-11ea-bf23-579b03518232 + a96db688-fc34-11ea-9a90-77d813bdea3b + a96dd762-fc34-11ea-9379-8f322766bd89 + a96df7b0-fc34-11ea-811e-33628901bfb8 + a96e1786-fc34-11ea-8d72-d3ae9cd6c288 + a96e3766-fc34-11ea-8851-2ff8a11412e7 + a96e57f0-fc34-11ea-bee6-ffa57f83c139 + a96e732a-fc34-11ea-9e9b-237c46f9688f + a96e9382-fc34-11ea-96c5-3b8332dce168 + a96eb2b8-fc34-11ea-9e48-df3878fe0fde + a96ed07c-fc34-11ea-98ff-bff73a0039a3 + a96eee68-fc34-11ea-90c7-afb5c5bbcc1c + a96f0ea2-fc34-11ea-ab44-03c5155ddd26 + a96f2d6a-fc34-11ea-bc90-537c2e265c1e + a96f4a8e-fc34-11ea-a029-0f39a503081a + a96f6654-fc34-11ea-8131-67e510381d4d + a96f8580-fc34-11ea-ba1a-7377323c7a71 + a96fa204-fc34-11ea-82fe-87785e14ed4b + a96fbfb4-fc34-11ea-b3c0-c327f4f57c15 + a96fddaa-fc34-11ea-90db-27f64e1437fd + a96fffe2-fc34-11ea-9380-1f85c152a075 + a97022ba-fc34-11ea-92a1-93cb79cd6961 + a97042f4-fc34-11ea-8652-6fe3f5107da9 + a9706298-fc34-11ea-b9b3-9fb4c8e37d06 + a9708124-fc34-11ea-bf1c-dbb52fd50df7 + a970a26c-fc34-11ea-9d4e-ef2dff6b1633 + a970c12a-fc34-11ea-8043-87bc474eaf08 + a970ddf4-fc34-11ea-b10d-5b16d6df85c2 + a970fadc-fc34-11ea-86bd-3f9908d05c20 + a971172e-fc34-11ea-9e6b-6f8b7357b9bc + a97134de-fc34-11ea-b22f-e70842cf6373 + a97151b2-fc34-11ea-89c0-c3cb2d459ef9 + a9716e86-fc34-11ea-8d33-97b477fc817e + a9718a92-fc34-11ea-8c1d-b3b3480c4c79 + a971a90a-fc34-11ea-a280-1bc9de0e15cf + a971c5de-fc34-11ea-952f-aff30f9bd9d5 + a971e2da-fc34-11ea-9e3b-d3dd4918288f + a9720238-fc34-11ea-a9f0-7feec3bc41a7 + a9721f16-fc34-11ea-9ecb-4f0b1f087d47 + a9723bcc-fc34-11ea-b35a-cf151131416e + a9725a4e-fc34-11ea-b5ff-dbec1fecd56b + a97278e4-fc34-11ea-ae2a-1b93c9fef36c + a9729c5c-fc34-11ea-9c08-f734936f944f + a972bbba-fc34-11ea-94f7-97fed22206ea + a972dcee-fc34-11ea-bf8d-f36b7cb3d3f7 + a972fcc4-fc34-11ea-8a8d-1724d38895e6 + a9731dd0-fc34-11ea-82df-47308de0904b + a9733dd8-fc34-11ea-8f48-33e7e8343889 + a9735a8e-fc34-11ea-881a-ef2f239f173c + a97379e2-fc34-11ea-aed4-87c7c29da930 + a973986e-fc34-11ea-8019-3f35abd622f2 + a973b7f4-fc34-11ea-ac3f-f7bb69d6ce80 + a973d4e6-fc34-11ea-b862-7b3fd61cf40f + a973f0b6-fc34-11ea-885c-0b5688641525 + a9740eca-fc34-11ea-b1ef-8b462324d4a4 + a9742d10-fc34-11ea-8b6f-c3e692b77ba8 + a9744c8c-fc34-11ea-a623-bf02b6136880 + a9746bc2-fc34-11ea-bf43-f3adbd9a7c5d + a9748a6c-fc34-11ea-9151-cfd51219041e + a974a880-fc34-11ea-9c0c-1f64a5d894a1 + a974c90a-fc34-11ea-895e-7b9f35da8c78 + a974e9f8-fc34-11ea-92d2-fff6ac1e1562 + a9750794-fc34-11ea-b9a9-6f050eeed55e + a9752972-fc34-11ea-b2b8-7f56931b0566 + a9754e48-fc34-11ea-a2be-b3a0965f0378 + a9756d88-fc34-11ea-a6da-5fe837b1c37f + a9758c5a-fc34-11ea-a871-fbe685ed3688 + a975ac26-fc34-11ea-95d5-73a1540194cc + a975c8b4-fc34-11ea-9071-4b7dc455a4ec + a975e6dc-fc34-11ea-8e06-8b496176c789 + a9760572-fc34-11ea-8989-57fdae61b7c7 + a97624c6-fc34-11ea-993c-17aa9791d0d8 + a976429e-fc34-11ea-ba77-4b43f9d141fa + a9765eb4-fc34-11ea-be0b-cfa4aa17d6f2 + a9767d90-fc34-11ea-b99e-4f75c6ba6d37 + a9769d02-fc34-11ea-a57f-9f31e6ec749e + a976bbe8-fc34-11ea-a3b3-df66791802af + a976daa6-fc34-11ea-9401-efd49e161d77 + a976faf4-fc34-11ea-8b41-1bec406c18ed + a97718d6-fc34-11ea-a8dc-d38e1c7c4b45 + a9773668-fc34-11ea-afd2-cf993618b5bb + a9775468-fc34-11ea-bac1-d3b20747420e + a977aee0-fc34-11ea-adcf-1b5375113675 + a977ced4-fc34-11ea-ace7-6f50f3706f54 + a977efa4-fc34-11ea-bb33-cb78abb1f571 + a9781308-fc34-11ea-8c67-137b41e39e75 + a978331a-fc34-11ea-b720-2b48261eba9f + a97851f6-fc34-11ea-a30c-6b7086d7dcfd + a9787172-fc34-11ea-ae68-a3a55d8754c3 + a97896f2-fc34-11ea-8a1b-67848cdc5e38 + a978b358-fc34-11ea-8b8b-17179c821a82 + a978d1b2-fc34-11ea-9d6e-df83fcd73d5b + a978f002-fc34-11ea-85d9-4f3c6f6ecd01 + a9790de4-fc34-11ea-9853-4bb5a2545eef + a9792b4e-fc34-11ea-8cca-e77b40914416 + a9794bf6-fc34-11ea-bd75-f32c2f4cac6a + a9796c62-fc34-11ea-bdaa-e7f14cb48b5c + a97989b8-fc34-11ea-86b5-df11665d99f6 + a979a894-fc34-11ea-a58e-abe206587131 + a979c7ca-fc34-11ea-85c5-a7be67517f11 + a979e43a-fc34-11ea-9a03-57b9879d1862 + a97a015e-fc34-11ea-b8eb-d34ace57596b + a97a1ed2-fc34-11ea-9afb-2f48734a2d7f + a97a422c-fc34-11ea-89bc-e322390e53d1 + a97a61c6-fc34-11ea-84f6-77af2ff6a041 + a97a869c-fc34-11ea-9930-cbee33ca9444 + a97aa6b8-fc34-11ea-865d-2fb5ac806628 + a97ac71a-fc34-11ea-80b0-8fb153f0250e + a97ae740-fc34-11ea-a6b0-ab36cb92eb60 + a97b0432-fc34-11ea-9622-c33740c25e2f + a97b2200-fc34-11ea-ac70-2f09c04af11a + a97b4168-fc34-11ea-a05f-f7d0b47c49ea + a97b6198-fc34-11ea-a95d-f30307e7795d + a97b8006-fc34-11ea-8015-db0142e6ea6f + a97b9df2-fc34-11ea-b997-97bfee73d107 + a97bbaa8-fc34-11ea-92b0-af403c6af7c2 + a97bd9ca-fc34-11ea-9751-8bfb5feb5a58 + a97bf996-fc34-11ea-9de3-47e1be667bdb + a97c193a-fc34-11ea-a7a4-2ff0fb728a5d + a97c36c2-fc34-11ea-8515-5b1dbd33217b + a97c53dc-fc34-11ea-8525-a3a6eb1a52f8 + a97c6ff2-fc34-11ea-9718-fbbed0da0e10 + a97c8ca8-fc34-11ea-ae43-3f26f853165a + a97ca9a4-fc34-11ea-a08d-cb6933508d66 + a97cc88a-fc34-11ea-9547-47a4b85a6130 + a97cecd4-fc34-11ea-8d0d-eb50db37d232 + a97d0e58-fc34-11ea-8032-072a6546eabf + a97d2d02-fc34-11ea-8af7-e7d53513e6e7 + a97d4a6c-fc34-11ea-bed7-5b5aaf5d0c85 + a97d6862-fc34-11ea-a3de-73c67e426e2b + a97d8658-fc34-11ea-a008-0f1213788f61 + a97da426-fc34-11ea-93df-cf7a4bbba784 + a97dc1e0-fc34-11ea-bb7e-97def7af6b12 + a97dde28-fc34-11ea-be3c-479ffb20d7a9 + a97dfd0e-fc34-11ea-bdff-d7fd3338bfdb + a97e1be0-fc34-11ea-a422-0f4551528002 + a97e3c06-fc34-11ea-9c5b-d7caa75f0197 + a97e586c-fc34-11ea-84c8-c32e957552eb + a97e786a-fc34-11ea-85d5-d72c3ed63f7a + a97e98b8-fc34-11ea-b8ce-0b604beadb5d + a97eb5d2-fc34-11ea-bb4e-a7a40b897c58 + a97ed4cc-fc34-11ea-a3ce-03e91ee28e7f + a97ef4c0-fc34-11ea-9400-a3609e0b9514 + a97f189c-fc34-11ea-9a6d-134d35dd7bb0 + a97f3804-fc34-11ea-b539-e7535fd576b8 + a97f560e-fc34-11ea-a398-677c691e3e5f + a97f760c-fc34-11ea-ac32-c3626b9ec77b + a97f942a-fc34-11ea-b1e0-2b909155c131 + a97fb36a-fc34-11ea-84a5-8fbf0ba3b58d + a97fd5ca-fc34-11ea-a8af-1333713f0381 + a97ff712-fc34-11ea-8247-970c01405f10 + a98014d6-fc34-11ea-9ad7-439abd86aae0 + a980311e-fc34-11ea-b35a-13e449e166a5 + a9804f28-fc34-11ea-877a-f701191fbfac + a9806e5e-fc34-11ea-8190-6bfe3fb48793 + a9808ede-fc34-11ea-84c0-7740f5601756 + a980ad42-fc34-11ea-942e-e7b0503ae9b4 + a980ca48-fc34-11ea-8322-f788020bf13d + a980e9f6-fc34-11ea-bb29-4f90e55b4ca5 + a98105b2-fc34-11ea-8766-7b8d3da349f2 + a98123ee-fc34-11ea-8614-6fd77c76347f + a9814310-fc34-11ea-9210-33eb02b122ce + a98162c8-fc34-11ea-ac1f-c720d2b1c44a + a98182da-fc34-11ea-91aa-bf63fbcd4b06 + a981a1fc-fc34-11ea-8650-6bf1ba2da59d + a981c2ea-fc34-11ea-b0c4-ab1500c67950 + a981e3e2-fc34-11ea-9ddf-df72f958de08 + a98201ec-fc34-11ea-bdbe-77b2896670a5 + a982233e-fc34-11ea-9021-33296781a75e + a98241ca-fc34-11ea-a324-771dafa98ffb + a9825f98-fc34-11ea-9b3c-f32dd2538184 + a9827eb0-fc34-11ea-b8b0-0376745e303b + a9829d6e-fc34-11ea-9f27-f700089da6aa + a982bab0-fc34-11ea-ab35-137808dc6b2e + a982d784-fc34-11ea-9c30-c7fb17df5235 + a982f4bc-fc34-11ea-896a-ffdca9bef5ac + a98312e4-fc34-11ea-80d3-cf9544ca860d + a98330ee-fc34-11ea-9728-830711d4a125 + a9834ee4-fc34-11ea-a426-03977d0de92b + a9836d34-fc34-11ea-9ed3-23a3adaa9c12 + a9838a76-fc34-11ea-97f6-d741de6b0617 + a983a966-fc34-11ea-9393-1f74bb2c9884 + a983c770-fc34-11ea-a15c-8f29f4baf1f1 + a983e340-fc34-11ea-8695-6b674342d984 + a984017c-fc34-11ea-a0be-eb1ceffbdd45 + a9842490-fc34-11ea-b51d-33697327be80 + a98448f8-fc34-11ea-9f71-eb8246ce1475 + a9846888-fc34-11ea-b97c-d7ee5b288899 + a984889a-fc34-11ea-804a-6716525f3c66 + a984a802-fc34-11ea-ad94-17a751e62083 + a984c80a-fc34-11ea-bf5c-e317b11faa86 + a984e510-fc34-11ea-8702-137bc3430b84 + a985068a-fc34-11ea-b01b-672d1ae16e4d + a98523e0-fc34-11ea-bf7b-cf93820c108d + a9854302-fc34-11ea-9ece-235ad62bfa11 + a9855ffe-fc34-11ea-8ff5-471ffbe373b7 + a9857e4e-fc34-11ea-b233-cf6772cfd143 + a9859cf8-fc34-11ea-a075-3f00e2fae58a + a985bd00-fc34-11ea-bd94-5b8824e4fbec + a985da1a-fc34-11ea-aae0-dffcf525988c + a985f78e-fc34-11ea-8fa1-7797ffc0fb1d + a986146c-fc34-11ea-b633-eb841f3263bc + a9863276-fc34-11ea-a8e9-eb30c03c1051 + a9865184-fc34-11ea-9793-87397421f627 + a9867042-fc34-11ea-b493-7bf0a2d002fa + a9868dd4-fc34-11ea-a9e5-13efdb27091a + a986ab5c-fc34-11ea-ae6b-53e020ff101c + a986cae2-fc34-11ea-813b-e7a6393ed00b + a986eab8-fc34-11ea-a3fd-6ffab67c5d2b + a9870e80-fc34-11ea-82e2-531cd27b59a4 + a9872e60-fc34-11ea-bbc4-93c6781eac51 + a9874d78-fc34-11ea-b74e-5764a5632cd9 + a9877172-fc34-11ea-8f6f-d358d7a8d034 + a98791de-fc34-11ea-8554-f748b49870f7 + a987adea-fc34-11ea-8d2b-8fcd98b6b9fc + a987cb0e-fc34-11ea-9f49-bf773d4b6875 + a987ea9e-fc34-11ea-86f3-cb1035101f19 + a98808c6-fc34-11ea-b472-175ccd8c09c5 + a9882cca-fc34-11ea-8e57-f35aafcb1dac + a9884bf6-fc34-11ea-b974-978a5ac7d809 + a98868de-fc34-11ea-832b-c715f113d428 + a9888792-fc34-11ea-9259-cbc00ac9d46d + a988a664-fc34-11ea-881e-df9e132a112c + a988c3ec-fc34-11ea-9e25-338fb8b93228 + a988e214-fc34-11ea-acec-b31a69cfdbac + a989015e-fc34-11ea-8b9b-5bec1d9cd379 + a9891e1e-fc34-11ea-b0b7-7bd30767b735 + a9893cbe-fc34-11ea-bad3-5fed25a3531e + a9895c3a-fc34-11ea-b7db-9702b4364783 + a98980ac-fc34-11ea-8d31-e39f05f477fe + a989a1c2-fc34-11ea-9010-f7470213bb35 + a989c27e-fc34-11ea-98f8-93384eba3112 + a989e36c-fc34-11ea-8c66-5f520b65431b + a98a0298-fc34-11ea-81ec-23aceec7d46c + a98a1ed6-fc34-11ea-a147-b751f846d552 + a98a3c9a-fc34-11ea-abaf-d3e8817b1526 + a98a5c7a-fc34-11ea-8122-2f0bc6d5884b + a98a7a0c-fc34-11ea-a238-3f1061b4d40c + a98a980c-fc34-11ea-a1b9-f3f2a24b6683 + a98ab698-fc34-11ea-8ada-a75ad035305e + a98ad664-fc34-11ea-b28b-17963f3c0ff6 + a98af48c-fc34-11ea-b0d3-772502376c0d + a98b1430-fc34-11ea-8f08-bfd2652d2213 + a98b31a4-fc34-11ea-93b0-8336e2cb7f16 + a98b4ed2-fc34-11ea-ac67-4b570360c32b + a98b6b24-fc34-11ea-ba73-53e993253c58 + a98b9054-fc34-11ea-ab3c-971aab494f42 + a98baeb8-fc34-11ea-aa78-2b509ef2a6f3 + a98bcb96-fc34-11ea-964f-87cc94a69314 + a98beb6c-fc34-11ea-a506-eb63319189b0 + a98c0fde-fc34-11ea-bcf9-eb6ad769cdf5 + a98c3220-fc34-11ea-9fc7-eb8a67b729e4 + a98c503e-fc34-11ea-b0ea-03767121639d + a98c6cf4-fc34-11ea-b279-57c1b256b047 + a98c8f9a-fc34-11ea-8f18-0f0b96779d71 + a98cae76-fc34-11ea-9f91-5360bcd59737 + a98ccc1c-fc34-11ea-874d-675ebd66853c + a98ce972-fc34-11ea-84cb-cbd62269cca5 + a98d08c6-fc34-11ea-9a92-8b8f38297087 + a98d2982-fc34-11ea-8ea3-57f6d112691a + a98d4c78-fc34-11ea-9c91-c78b05cc3407 + a98d6ab4-fc34-11ea-a4a7-7767c201fdc5 + a98d8774-fc34-11ea-8c55-0fec94f6215c + a98da5ec-fc34-11ea-87a8-6b0e4aad71da + a98dc414-fc34-11ea-a0fc-8777ea197363 + a98de110-fc34-11ea-a86c-1f6b10180fe9 + a98dfeb6-fc34-11ea-a944-eb1e7d6fdeb1 + a98e1d06-fc34-11ea-a7d6-6f5069c6688d + a98e3d4a-fc34-11ea-bfe4-6fcc20fa2350 + a98e5b5e-fc34-11ea-80ce-8b875a4c540d + a98e7ce2-fc34-11ea-9fb1-0fde29137eb9 + a98e9cb8-fc34-11ea-baa9-5bed4a3cc21c + a98eb9f0-fc34-11ea-a6d2-4b8c08d10940 + a98ed84a-fc34-11ea-b580-5fd80b28a07a + a98ef7bc-fc34-11ea-b867-cfc374671fd2 + a98f160c-fc34-11ea-8567-1be8a83f3357 + a98f3402-fc34-11ea-8413-a3eae0c38fea + a98f53f6-fc34-11ea-a43a-9fa557b9a01b + a98f73c2-fc34-11ea-9e71-779d50fed69f + a98f930c-fc34-11ea-8426-2759d1ff0c88 + a98fb09e-fc34-11ea-a690-3f60b9daf3d5 + a98fcd4a-fc34-11ea-9854-078363917513 + a98feb54-fc34-11ea-9e08-77d9bb7cb107 + a99008c8-fc34-11ea-856e-cf52adc6ac31 + a990265a-fc34-11ea-af80-479c15c8670b + a9904360-fc34-11ea-9485-5f587e919e4d + a9906264-fc34-11ea-bd54-cb1868612672 + a9908046-fc34-11ea-bbad-8fde4f097666 + a9909e8c-fc34-11ea-bf81-3f7fa1902d51 + a990bab6-fc34-11ea-907a-bf4fc0295a67 + a990d97e-fc34-11ea-9154-af2174885a03 + a990f6f2-fc34-11ea-a30d-237b420cba88 + a9911934-fc34-11ea-8824-f393e3baaa39 + a9913b26-fc34-11ea-b796-53602ce1171f + a9915bc4-fc34-11ea-b9a9-8bfae7f1dc4f + a99180e0-fc34-11ea-9eac-43c192f924e9 + a991a32c-fc34-11ea-85dc-57aec9b5c448 + a991c41a-fc34-11ea-b696-63ad7666ec1e + a991e2a6-fc34-11ea-975b-db518e549ef4 + a991ff7a-fc34-11ea-b8fb-cf89f5dc53f2 + a9921c58-fc34-11ea-8f13-3fa25e5ad4e1 + a9923c42-fc34-11ea-b201-3b54dbc2f699 + a992592a-fc34-11ea-965c-8326fb2ba6a6 + a99276da-fc34-11ea-84f7-e3dd3b52cf7c + a99292fa-fc34-11ea-8396-9378324e2948 + a992b1ea-fc34-11ea-9f5b-afd7e483d5b4 + a992ce5a-fc34-11ea-8e7d-97e1c3239c3a + a992ee4e-fc34-11ea-88e8-a73571951390 + a9930eec-fc34-11ea-9842-f3ff7a4d1c82 + a9932c7e-fc34-11ea-a9aa-2f8892554c08 + a9934ace-fc34-11ea-bec3-d7d6d48d70a7 + a99368ce-fc34-11ea-a42d-076b41ffbd87 + a9938a02-fc34-11ea-bc53-2f21604d1736 + a993a97e-fc34-11ea-8585-3f91efcdb913 + a993c9f4-fc34-11ea-9cdf-2bf0c07b2f71 + a993ee2a-fc34-11ea-89b2-df38dc25f0d0 + a9940cde-fc34-11ea-933f-b740e56ddb06 + a9942c46-fc34-11ea-bfc0-073466224265 + a9944938-fc34-11ea-92fa-4f60b825dc81 + a99466d4-fc34-11ea-9410-ff5a5cb9e719 + a994866e-fc34-11ea-a389-3bc1e16bf9c7 + a994a59a-fc34-11ea-a0c1-735578465930 + a994c5c0-fc34-11ea-a21b-b73876cc8a6c + a994e23a-fc34-11ea-aaae-77da09994c16 + a9950094-fc34-11ea-9aab-471c810282f6 + a9951e08-fc34-11ea-ae6c-5b8cd5e22738 + a9953db6-fc34-11ea-bac9-6bac2f5520b4 + a9955a30-fc34-11ea-8444-bf3ed90521ee + a9957754-fc34-11ea-a7b2-57ce0d5d76a5 + a99593d8-fc34-11ea-a802-07c36f035557 + a995b3ea-fc34-11ea-87cc-735f07c4b7a3 + a995d320-fc34-11ea-9296-4bb213576ecc + a995f210-fc34-11ea-875a-675e4a9438d6 + a99613ee-fc34-11ea-be15-7fe5d7dbf720 + a9963540-fc34-11ea-9253-ab722840b827 + a99654b2-fc34-11ea-bd3d-23b58205f170 + a9967942-fc34-11ea-a96d-4b169590bf5c + a99699e0-fc34-11ea-b753-2f4b3c20d8b8 + a996b8ee-fc34-11ea-b5dc-5f6fafd98a51 + a996d784-fc34-11ea-ab7e-8b1e0139abbc + a996f5de-fc34-11ea-92ee-bb08c6e576db + a997167c-fc34-11ea-942e-c3e12bb45ff5 + a997347c-fc34-11ea-8dcb-7b6f682bfcf8 + a9975416-fc34-11ea-a65e-3f9781befa28 + a9977540-fc34-11ea-b6d2-4b5492531ecd + a997964c-fc34-11ea-8c0a-cb640b53099f + a997ddd2-fc34-11ea-b8d6-bb2f95f4b008 + a99803ca-fc34-11ea-af58-6f7e2499feb1 + a9982508-fc34-11ea-9746-3706a55e367f + a9984d26-fc34-11ea-9bab-bfdb55cdf68e + a99887dc-fc34-11ea-8723-7f638bfaab58 + a998c8be-fc34-11ea-83d2-efa1a26e4719 + a998f9ec-fc34-11ea-983a-fb417cbf6223 + a9991a4e-fc34-11ea-9203-33183aba3444 + a9993876-fc34-11ea-a482-f32171358a57 + a9995ae0-fc34-11ea-9b12-8b27093ff09a + a9997b2e-fc34-11ea-b7ee-db2d74a27ad1 + a9999c12-fc34-11ea-a4c7-d77b141d875a + a999ba3a-fc34-11ea-bfb5-ab1ebbaaa640 + a999d844-fc34-11ea-bb37-b776ef53795c + a999f504-fc34-11ea-be9e-670f85be351f + a99a1598-fc34-11ea-96da-87a12335f00b + a99a3532-fc34-11ea-a68e-eba4f45c659c + a99a574c-fc34-11ea-85c7-2b36b6260b15 + a99a733a-fc34-11ea-aa92-334f620a8d69 + a99a91c6-fc34-11ea-b3de-a7c7aaaa9e32 + a99aaf6c-fc34-11ea-a1f4-fb08cf6de486 + a99acd80-fc34-11ea-affb-5b545cd80a5e + a99aed9c-fc34-11ea-978d-5391b8320a70 + a99b0c78-fc34-11ea-9fa6-431253c1b414 + a99b2b36-fc34-11ea-ab5f-030dcb174f62 + a99b481e-fc34-11ea-8c5b-cf17fd51bc94 + a99b68ee-fc34-11ea-beb2-53a4e39146c9 + a99b86f8-fc34-11ea-b054-db6ca01caa62 + a99ba584-fc34-11ea-8054-ab22d289682a + a99bc4b0-fc34-11ea-82b2-db0c5f92522b + a99be328-fc34-11ea-ab63-8ffeb075c020 + a99c02fe-fc34-11ea-949f-3b05f9adbc09 + a99c21ee-fc34-11ea-aade-771b375fae2c + a99c402a-fc34-11ea-8bf6-770f5d37c448 + a99c5e16-fc34-11ea-ab5c-13f8a848da31 + a99c7a7c-fc34-11ea-9775-779b8dddeb94 + a99c98f4-fc34-11ea-9225-d396bf737406 + a99cb60e-fc34-11ea-b68c-1fb7d4e12a64 + a99cd3e6-fc34-11ea-8bf1-9b2835808740 + a99cf128-fc34-11ea-ab95-ebc998c00f7f + a99d0f3c-fc34-11ea-9f1a-af713edad3b3 + a99d2e2c-fc34-11ea-b3c6-d73dca850abe + a99d4cb8-fc34-11ea-b744-670a8447a828 + a99d6ba8-fc34-11ea-ad21-1fe55954686f + a99d8a16-fc34-11ea-9a5d-8f6b6dd605ab + a99da87a-fc34-11ea-aff0-d7063dfd2119 + a99dcae4-fc34-11ea-9b36-fba7590ae698 + a99ded44-fc34-11ea-8192-0f4941d6a4ff + a99e0c02-fc34-11ea-9ab5-abca8c475f39 + a99e2b56-fc34-11ea-b7f9-37bed8cb15a2 + a99e4a82-fc34-11ea-8b5f-839ef94ba1eb + a99e6a94-fc34-11ea-b2fb-efb7ed0c6c36 + a99e8830-fc34-11ea-8b47-0bc9a8734254 + a99ea5d6-fc34-11ea-b1c0-9347be9ed914 + a99ec3e0-fc34-11ea-a488-3ff501d27473 + a99ee294-fc34-11ea-8e8a-bfdb1b2d3f5c + a99f01a2-fc34-11ea-a22e-f7cb9e698200 + a99f1e4e-fc34-11ea-86a4-3fec9a9db31e + a99f3ba4-fc34-11ea-a266-a3f8cab98459 + a99f5abc-fc34-11ea-a065-479c2affa286 + a99f7768-fc34-11ea-87fd-17be47581331 + a99f957c-fc34-11ea-be71-0b417b8301b2 + a99fb408-fc34-11ea-b21d-7ff8a975d930 + a99fd30c-fc34-11ea-8ff9-c3ce01b245b4 + a99ff094-fc34-11ea-858b-ff2106470a94 + a9a00fc0-fc34-11ea-afa8-63ca46f0f8a8 + a9a02db6-fc34-11ea-855c-d3f8a222f094 + a9a04fc6-fc34-11ea-88ae-33857aa9f977 + a9a071b8-fc34-11ea-aefc-fb8a42c5171e + a9a091d4-fc34-11ea-8acf-5b13515959ba + a9a0b15a-fc34-11ea-b5a5-a37225b2af77 + a9a0d7c0-fc34-11ea-84b9-a74ff4543e9e + a9a0f8d6-fc34-11ea-80a0-fbfd1aed6e31 + a9a116e0-fc34-11ea-8fa8-234fc7542106 + a9a13472-fc34-11ea-8c3b-677de2d4fb72 + a9a15100-fc34-11ea-9fd2-932b3e120a32 + a9a170b8-fc34-11ea-87da-2f4a7e14cfa4 + a9a18fbc-fc34-11ea-a008-8f0c15a36414 + a9a1adc6-fc34-11ea-a70e-2b12754d8f27 + a9a1cad6-fc34-11ea-b1d5-3717f871a343 + a9a1e8cc-fc34-11ea-b937-eb840f6d8555 + a9a207d0-fc34-11ea-9507-b7e25fb2d133 + a9a22558-fc34-11ea-9df3-2f7d58e485e4 + a9a2442a-fc34-11ea-996b-cbcc1ddf7c96 + a9a26338-fc34-11ea-95c9-eb238c017b98 + a9a28322-fc34-11ea-a4d0-17af10b7e3f7 + a9a2a604-fc34-11ea-af7a-271bfa009d03 + a9a2c8d2-fc34-11ea-9052-93eb971dd85a + a9a2e786-fc34-11ea-b850-77745a0b20f4 + a9a307e8-fc34-11ea-94af-03a3594f36db + a9a32700-fc34-11ea-b4ee-e7b8e03543be + a9a347d0-fc34-11ea-90e7-03518c4a94b9 + a9a366e8-fc34-11ea-87f9-3b8cba8277db + a9a386aa-fc34-11ea-9fcd-dbcfbc8803a9 + a9a3a324-fc34-11ea-90a6-432eaf946b2a + a9a3bfee-fc34-11ea-a880-5be9ec292302 + a9a3e316-fc34-11ea-9b24-6b6cb14ccb36 + a9a4038c-fc34-11ea-bd3b-3773ec9e76dc + a9a42088-fc34-11ea-a143-43e878a8d31e + a9a43ea6-fc34-11ea-9a87-bbbc0bf5ef31 + a9a45cd8-fc34-11ea-9150-9fecafb760c9 + a9a479ac-fc34-11ea-be02-7b4d23f03252 + a9a49824-fc34-11ea-bc85-eb6c2e9680bf + a9a4b7d2-fc34-11ea-b0ba-ff5c16217a06 + a9a4d686-fc34-11ea-bb82-db225b17846a + a9a4f288-fc34-11ea-a204-8355e3c3a811 + a9a50fd4-fc34-11ea-98f9-678a90c25ccd + a9a52d52-fc34-11ea-a65d-2f29ff5d1d06 + a9a54db4-fc34-11ea-8e8e-1f7a8c5700bb + a9a56c18-fc34-11ea-a079-0b198e10130d + a9a58b94-fc34-11ea-b3d3-2313e0f3f880 + a9a5af66-fc34-11ea-9593-6716dddce1f9 + a9a5d536-fc34-11ea-86b3-4723c4b43c92 + a9a5f2d2-fc34-11ea-84e5-cbe07595949a + a9a60fd8-fc34-11ea-a427-d3ab2e41ea49 + a9a62e64-fc34-11ea-8c36-43f5bf483e24 + a9a64c96-fc34-11ea-aee0-230c7831e4d8 + a9a66a1e-fc34-11ea-ab78-377833b9e717 + a9a68a6c-fc34-11ea-8d28-8bebf3d09950 + a9a6a74a-fc34-11ea-bd12-e73666e4ae42 + a9a6c626-fc34-11ea-a892-f39cc81c662f + a9a6e412-fc34-11ea-9190-6bacaaefc681 + a9a70366-fc34-11ea-9f0b-6b858e056f1f + a9a721c0-fc34-11ea-9257-2f4468f9f17d + a9a73e6c-fc34-11ea-9037-f701422dcc5d + a9a75de8-fc34-11ea-beac-db6946c5abfb + a9a77a76-fc34-11ea-95b8-d716268bc1bf + a9a79934-fc34-11ea-be21-67128ac9125f + a9a7b61c-fc34-11ea-b894-7792a1577b52 + a9a7d4e4-fc34-11ea-b8b3-b74a1d9f1849 + a9a7f820-fc34-11ea-a9fe-23e235e98086 + a9a81b16-fc34-11ea-95c6-53ec012c9fc9 + a9a83bc8-fc34-11ea-97bf-67d722f7eff6 + a9a85ca2-fc34-11ea-96d9-071bbe51cda3 + a9a8806a-fc34-11ea-be4f-478d40b71022 + a9a89f46-fc34-11ea-a1c6-575681e19db2 + a9a8bcd8-fc34-11ea-933f-bb43f180fdff + a9a8dc9a-fc34-11ea-913e-2fb73d07bd95 + a9a8f860-fc34-11ea-9497-47835a473e77 + a9a915fc-fc34-11ea-91e9-0b7a8d3a1be8 + a9a93528-fc34-11ea-ad7b-67bdd600791b + a9a95620-fc34-11ea-b9ef-bf36abc65796 + a9a97484-fc34-11ea-824c-97aada765346 + a9a9936a-fc34-11ea-ae93-c3850e41d1af + a9a9b016-fc34-11ea-a917-7b481d3d5b85 + a9a9cc4a-fc34-11ea-a159-a7d1dbe6fd2b + a9a9e70c-fc34-11ea-a011-83c0486437ef + a9aa02c8-fc34-11ea-83dc-f36ea19d31a4 + a9aa1dee-fc34-11ea-8271-cb44559013d7 + a9aa3aa4-fc34-11ea-99cc-3bc259bf6383 + a9aa57be-fc34-11ea-98bc-8b111bfa05fc + a9aa78b6-fc34-11ea-8688-97db1adefc92 + a9aa99c2-fc34-11ea-9b41-7786c8ab2388 + a9aab92a-fc34-11ea-ae1d-7f108155ae62 + a9aad720-fc34-11ea-95e8-c79b28830a34 + a9aaf58e-fc34-11ea-8cf5-1339b6de0afd + a9ab1370-fc34-11ea-8f65-eb60058f1a9f + a9ab7a68-fc34-11ea-8fee-dfeb54879c44 + a9ab9b1a-fc34-11ea-9a6d-7fbc7d653f4d + a9abbb72-fc34-11ea-b393-5f720349ba66 + a9abdb0c-fc34-11ea-99be-37b129a07140 + a9abf790-fc34-11ea-b876-1347f20c7979 + a9ac1586-fc34-11ea-a150-2fcbd7fe1fa3 + a9ac3570-fc34-11ea-be73-bfa3e0670308 + a9ac5582-fc34-11ea-aa73-bf453a2a0f7f + a9ac73dc-fc34-11ea-9fd6-3bb72fbfe367 + a9ac966e-fc34-11ea-b874-db5b16f29c15 + a9acb400-fc34-11ea-9b88-0fe623ec06f3 + a9acd3fe-fc34-11ea-bc20-eb917d6788b3 + a9acfbcc-fc34-11ea-820a-439b439d9fd1 + a9ad1ac6-fc34-11ea-88ec-3fbf24ea70eb + a9ad3fce-fc34-11ea-927d-e3346bf0420d + a9ad6300-fc34-11ea-9b0d-cfd56c2daf52 + a9ad833a-fc34-11ea-81e5-13c036b02494 + a9ada8ce-fc34-11ea-963d-3fb47196de6c + a9adc728-fc34-11ea-843b-6f51b1f98b7e + a9ade7da-fc34-11ea-994b-1322c5004f93 + a9ae02e2-fc34-11ea-b021-1f2074564141 + a9ae1cb4-fc34-11ea-93b6-0357b5cacf28 + a9ae3e06-fc34-11ea-b6b3-ab7a4ae50645 + a9ae5864-fc34-11ea-a627-1b195ac1913f + a9ae7a24-fc34-11ea-a87e-07124cffe665 + a9ae946e-fc34-11ea-be82-132a7315a2cb + a9aead28-fc34-11ea-8a67-ff4d66aebf96 + a9aecaba-fc34-11ea-93ac-ab0a29a6b8b8 + a9aee702-fc34-11ea-8390-772890a792ed + a9af0b4c-fc34-11ea-a739-13e30a527d76 + a9af3464-fc34-11ea-80c8-4354dbfa23d5 + a9af5548-fc34-11ea-b1dd-830fb7ccccf1 + a9af767c-fc34-11ea-9536-1f483e64a2c4 + a9afada4-fc34-11ea-acab-3790ed1ced7f + a9afcf46-fc34-11ea-9967-03967781a568 + a9aff8cc-fc34-11ea-9a46-5385feb41478 + a9b01c3a-fc34-11ea-b151-e35c1b2f6f9e + a9b03d78-fc34-11ea-a7f3-cbc3fb59501b + a9b05f2e-fc34-11ea-aa40-8bb37a91cdb9 + a9b080da-fc34-11ea-8320-a784f70c1e7c + a9b0a4a2-fc34-11ea-af26-973053eb35c8 + a9b0c57c-fc34-11ea-8111-b36e3b32849e + a9b0e570-fc34-11ea-9dbe-cbdced92adf2 + a9b103f2-fc34-11ea-ba6d-232655ae9a07 + a9b125ee-fc34-11ea-917b-fb330141dfab + a9b147fe-fc34-11ea-8f6e-d340e5b4f10b + a9b16b1c-fc34-11ea-8310-43c04a439871 + a9b18b92-fc34-11ea-b33a-b7fba114f8b9 + a9b1a9f6-fc34-11ea-8784-131bdd492685 + a9b1cbe8-fc34-11ea-9ed8-777bddc59521 + a9b1ed58-fc34-11ea-8d39-33b8c73eee86 + a9b21026-fc34-11ea-bb39-cb2fa4ee5d1d + a9b23132-fc34-11ea-8ec5-bf871283dca5 + a9b25266-fc34-11ea-8e49-d74cb70afce7 + a9b27386-fc34-11ea-bf97-cb3d98628b74 + a9b29a8c-fc34-11ea-bb6c-ffc97a542ea5 + a9b2c0b6-fc34-11ea-a81c-8b629c619085 + a9b2e2bc-fc34-11ea-95dd-9beafe67e483 + a9b30382-fc34-11ea-8c46-275d16ea60c0 + a9b3229a-fc34-11ea-ad7c-73e1a5ec1c0d + a9b3420c-fc34-11ea-964c-f7a246fc8b55 + a9b361c4-fc34-11ea-bdc4-3b16c4674219 + a9b3833e-fc34-11ea-806e-fba81f182d1f + a9b3a382-fc34-11ea-bffd-7f47ddf13c8f + a9b3c434-fc34-11ea-90c9-4fc7200456ff + a9b3e4d2-fc34-11ea-8dfd-8bfe84238278 + a9b40516-fc34-11ea-b527-275ff9bc13ae + a9b425dc-fc34-11ea-9c31-17d92bf74155 + a9b44684-fc34-11ea-821e-9f9e1b8a1ac6 + a9b467fe-fc34-11ea-b1f6-7f6f68c57a9f + a9b48a72-fc34-11ea-a567-634d0b7773c5 + a9b4b010-fc34-11ea-bd02-87939209ba4f + a9b4d496-fc34-11ea-97b8-ff0279bb84fe + a9b4fb6a-fc34-11ea-87ac-eb3fa520bdbe + a9b51ce4-fc34-11ea-92db-37c210f3c1bd + a9b53fda-fc34-11ea-ad01-bfc88696b184 + a9b56168-fc34-11ea-a371-1bae9afacab1 + a9b58382-fc34-11ea-ad57-9f60236250d1 + a9b5a7c2-fc34-11ea-bcff-13bcc2bb822f + a9b5c9f0-fc34-11ea-a0fe-cfe61dd94221 + a9b5e8f4-fc34-11ea-82ad-dfc1eb27bdad + a9b60a50-fc34-11ea-9df7-77c5391dae21 + a9b6295e-fc34-11ea-8871-478e35b9515c + a9b64808-fc34-11ea-b38d-638aa025e435 + a9b66a04-fc34-11ea-9d14-cfe75f7e93ba + a9b68b42-fc34-11ea-afd2-2391270eecad + a9b6aba4-fc34-11ea-82d2-078277c57b32 + a9b6cbfc-fc34-11ea-be65-ab46da35a655 + a9b6e9c0-fc34-11ea-bbdc-3b9ef710cb4f + a9b709dc-fc34-11ea-bffa-636dac371003 + a9b728c2-fc34-11ea-ac11-5f276d032dfa + a9b74d2a-fc34-11ea-93a7-c749d6b8764c + a9b76f1c-fc34-11ea-b762-0b86b4ae6c55 + a9b79744-fc34-11ea-9415-1bfe850a5bc6 + a9b7bc92-fc34-11ea-b90e-eb7913da3ab9 + a9b7dd8a-fc34-11ea-8c4d-73e961da6bff + a9b7fec8-fc34-11ea-82f5-fbfbb62357b4 + a9b8222c-fc34-11ea-a482-3776c9c9c10c + a9b8423e-fc34-11ea-b8f9-eb403b10554f + a9b86412-fc34-11ea-a7b0-07f861658596 + a9b883b6-fc34-11ea-b95c-6b99014c63e7 + a9b8a2d8-fc34-11ea-b81d-4f65567ab8d5 + a9b8c63c-fc34-11ea-9190-7f022b758777 + a9b8e7b6-fc34-11ea-82c5-276a6768dfb0 + a9b90750-fc34-11ea-9233-370fbe929b6d + a9b92820-fc34-11ea-9b34-cf81e3201f3d + a9b94882-fc34-11ea-b8a6-a7216020d6d5 + a9b967f4-fc34-11ea-9339-87d7f7c6dbec + a9b9870c-fc34-11ea-a06a-cfe1afb4deed + a9b9a886-fc34-11ea-a64d-7fd0458ecb0f + a9b9cabe-fc34-11ea-a953-8708d2bc6972 + a9b9f28c-fc34-11ea-9c60-c36109250ba3 + a9ba1578-fc34-11ea-b041-1f332beb07be + a9ba3666-fc34-11ea-8c89-4bc5ef7e478a + a9ba5858-fc34-11ea-9f85-1b0603e4fbaa + a9ba79c8-fc34-11ea-9118-ff7be346f859 + a9ba9b88-fc34-11ea-9114-4327f8a81749 + a9babba4-fc34-11ea-9d92-5fedef694d0a + a9badcba-fc34-11ea-a01a-8f8866dab2ed + a9bafc40-fc34-11ea-bb51-4fed937525be + a9bb1b08-fc34-11ea-932c-3bc5205e3d9a + a9bb3ca0-fc34-11ea-93f3-23b85f52de6d + a9bb5bae-fc34-11ea-bcdd-0b440dd28489 + a9bb7c74-fc34-11ea-8878-cbbddc332ccc + a9bba046-fc34-11ea-8f79-9bd23463d151 + a9bbc396-fc34-11ea-a0c7-a7759cf347a8 + a9bbe272-fc34-11ea-a85a-07ef6b1254fe + a9bc0388-fc34-11ea-813e-7731124f8617 + a9bc253e-fc34-11ea-9130-53099d5c7a94 + a9bc4582-fc34-11ea-9abb-7bd56cf66cfb + a9bc663e-fc34-11ea-a7f2-3b79404aff03 + a9bc890c-fc34-11ea-8e90-23deb659e756 + a9bcaa22-fc34-11ea-bc1b-b3af2fff1b91 + a9bccdb8-fc34-11ea-b714-1fbcdfb2acfe + a9bcf342-fc34-11ea-b8e9-2bb1f2335d6b + a9bd1282-fc34-11ea-9e66-c74dd5653773 + a9bd3334-fc34-11ea-b397-7f0860add4d8 + a9bd54c2-fc34-11ea-83be-fb9af9aac78b + a9bd78d0-fc34-11ea-9d96-2b1631a1b2f8 + a9bd9bb2-fc34-11ea-884e-9f96c73e6075 + a9bdbd86-fc34-11ea-bb06-ff5cd1f3af17 + a9bddd16-fc34-11ea-b0ba-5b2a64829300 + a9be002a-fc34-11ea-9828-6b4d2b48b5c5 + a9be2000-fc34-11ea-81c6-fbbfe18090f7 + a9be4292-fc34-11ea-8f0b-1b6c83ee8044 + a9be64e8-fc34-11ea-8766-53a30d090694 + a9be85f4-fc34-11ea-9762-47b5ff18c3ea + a9bea7b4-fc34-11ea-8425-a364174f752c + a9becabe-fc34-11ea-b2d7-c7826ebe5f90 + a9beec10-fc34-11ea-98e2-639cc8753c56 + a9bf0c4a-fc34-11ea-ab0a-2f2315b85bc7 + a9bf2d24-fc34-11ea-bbf8-a310802d576d + a9bf4fb6-fc34-11ea-9b93-d33abc183f22 + a9bf6f00-fc34-11ea-bb43-9b0940e57444 + a9bf9142-fc34-11ea-836f-2bba7a00191a + a9bfb2d0-fc34-11ea-95a3-5739744ae61e + a9bfd260-fc34-11ea-8e2d-4badffe36e1e + a9bff326-fc34-11ea-85a5-d729d575fe33 + a9c01aea-fc34-11ea-b69a-032b43a26f6a + a9c03a02-fc34-11ea-8df8-0744e01ccfff + a9c05c76-fc34-11ea-9456-4390b348b4ca + a9c07df0-fc34-11ea-ad97-af06d4d6130e + a9c09d62-fc34-11ea-9915-e3a203c01b24 + a9c0bff4-fc34-11ea-ba04-772d5dc1ff34 + a9c0e04c-fc34-11ea-8064-bfd3601be41f + a9c10112-fc34-11ea-a510-c702cc3356b2 + a9c12804-fc34-11ea-8a6c-777f0a88612e + a9c14ab4-fc34-11ea-8ebd-b34439cc6a6d + a9c16d82-fc34-11ea-92bd-832f43c692f2 + a9c190f0-fc34-11ea-9c20-27657ce646b6 + a9c1b8a0-fc34-11ea-aee0-e3eab56556a1 + a9c1dbf0-fc34-11ea-8324-93a72a0f94d6 + a9c1fd38-fc34-11ea-8378-1374dfe4dfc3 + a9c21dcc-fc34-11ea-9af5-2b356cd0acb5 + a9c23fa0-fc34-11ea-a4eb-afa1526832b8 + a9c264da-fc34-11ea-9d1b-fbbea678fd9d + a9c284e2-fc34-11ea-94bb-3bcb4f94a8a6 + a9c2a6ac-fc34-11ea-8e01-83fcc298ea79 + a9c2c736-fc34-11ea-aaaf-7f4b6d51002d + a9c2e8b0-fc34-11ea-85e5-27215979fdc1 + a9c30778-fc34-11ea-b7f9-6b14d047c8b9 + a9c3274e-fc34-11ea-99a3-5fad7c6141b9 + a9c348a0-fc34-11ea-ac13-cb84b5252287 + a9c36916-fc34-11ea-814d-c796f3abbb79 + a9c38dc4-fc34-11ea-84c8-b7fd3c35dab0 + a9c3b0ec-fc34-11ea-8325-13c134bac6ee + a9c3d194-fc34-11ea-a9b6-73bacd2a0088 + a9c3f232-fc34-11ea-aa81-3bf0dc11bf0f + a9c4135c-fc34-11ea-aa97-5797d5e963d0 + a9c43b66-fc34-11ea-8b64-375dc9b23d50 + a9c45df8-fc34-11ea-bde0-6ff63d6b46f3 + a9c47ec8-fc34-11ea-9ac1-6ba72ee80c2b + a9c4a09c-fc34-11ea-820e-6b51cb134f3a + a9c4c144-fc34-11ea-85e5-c732b3257e50 + a9c4e1ce-fc34-11ea-b312-73a28ced8e2f + a9c502d0-fc34-11ea-9d1c-a77d0cdee466 + a9c521e8-fc34-11ea-a318-cbbceac0fc4e + a9c544fc-fc34-11ea-ae8a-6709d50db534 + a9c567b6-fc34-11ea-8488-b756577228f0 + a9c58a5c-fc34-11ea-9e7d-2722068b6eb4 + a9c5ae2e-fc34-11ea-8c01-5331d9b422f5 + a9c5cee0-fc34-11ea-a3b2-23a80cebe2a3 + a9c5edbc-fc34-11ea-bf10-2f622ed9ef7e + a9c61044-fc34-11ea-b9f4-17ef37be8dd9 + a9c63088-fc34-11ea-905d-4308a608317b + a9c655b8-fc34-11ea-aee3-afc2e73e9d91 + a9c677aa-fc34-11ea-94aa-23e6958fb1d2 + a9c6994c-fc34-11ea-8cee-7b04c26649cd + a9c6c322-fc34-11ea-9525-7342d21706b4 + a9c6e622-fc34-11ea-b419-472453ad6520 + a9c70738-fc34-11ea-b498-f734c74561c0 + a9c72a9c-fc34-11ea-b91f-a7cebe6beaa6 + a9c74bda-fc34-11ea-9e3c-776dc9f2023f + a9c76b38-fc34-11ea-91e2-8b18d979f5a0 + a9c78a8c-fc34-11ea-b93d-e31acf0bc84b + a9c7a9cc-fc34-11ea-82cf-6734c7c0f0ae + a9c7cfc4-fc34-11ea-a4be-03ca0e4accec + a9c7f2c4-fc34-11ea-970d-13ea116b3d47 + a9c81682-fc34-11ea-b1f3-0fc02352016e + a9c84080-fc34-11ea-b983-436963814c8c + a9c864a2-fc34-11ea-a58c-03bde6e82682 + a9c885ea-fc34-11ea-958f-1bb759918581 + a9c8ace6-fc34-11ea-bd1a-83ac7574c0f8 + a9c8d11c-fc34-11ea-a659-6304d79911c6 + a9c951d2-fc34-11ea-845a-87b1ab764149 + a9c978e2-fc34-11ea-8228-aba60ecb9a8f + a9c99c5a-fc34-11ea-8614-637d70528aa8 + a9c9bcee-fc34-11ea-9182-27d3f08cb1d2 + a9c9dd96-fc34-11ea-9eff-af337f4035a0 + a9c9ffb0-fc34-11ea-a02c-03b8c159447f + a9ca1ec8-fc34-11ea-b29a-13421c992519 + a9ca4092-fc34-11ea-95eb-0fe527bfe43a + a9ca6054-fc34-11ea-8a38-3f513eae0445 + a9ca7e90-fc34-11ea-bf23-c31493176428 + a9caa028-fc34-11ea-bf2b-fb8f8f6a897c + a9cac26a-fc34-11ea-85d0-27b0f90f8c96 + a9cae376-fc34-11ea-b800-3b3320681cee + a9cb02de-fc34-11ea-9437-cfde9662870a + a9cb246c-fc34-11ea-af7b-7377c59563ff + a9cb44c4-fc34-11ea-918a-771638e80b05 + a9cb64fe-fc34-11ea-964e-5353dd46fb57 + a9cb8bdc-fc34-11ea-a171-8bf13d8e4253 + a9cbae96-fc34-11ea-a01c-0b39147504c0 + a9cbd7a4-fc34-11ea-ac77-a769377af502 + a9cbfc7a-fc34-11ea-9315-2be2099e8b7f + a9cc2592-fc34-11ea-a221-87256bdf9519 + a9cc4a22-fc34-11ea-ba5c-279c51073c8b + a9cc6e58-fc34-11ea-9a28-db8234e2c1dd + a9cc9040-fc34-11ea-a47a-d7c21db1f209 + a9ccb4b2-fc34-11ea-8e0f-1fb813172460 + a9ccd67c-fc34-11ea-a1df-43438fac2a71 + a9ccf85a-fc34-11ea-a381-239396a390ca + a9cd19fc-fc34-11ea-9a38-7b57866cc011 + a9cd3d38-fc34-11ea-a7f6-e7c45e9c63f8 + a9cd6024-fc34-11ea-bc3e-47c8f3bb264f + a9cd85b8-fc34-11ea-b482-3f9b4fca48d9 + a9cdad2c-fc34-11ea-a36e-07d5e3a03121 + a9cdcf64-fc34-11ea-b1ce-dff5bceec689 + a9cdf138-fc34-11ea-b47a-73bf7faf5659 + a9ce1636-fc34-11ea-9ea3-93f007e4e4c9 + a9ce3ab2-fc34-11ea-abf0-63d1d1473100 + a9ce623a-fc34-11ea-841f-57d07ee3f81c + a9ce836e-fc34-11ea-8373-7b1076a69496 + a9cea7f4-fc34-11ea-8d30-3b75159ef86d + a9cecca2-fc34-11ea-beed-07bab42aa340 + a9cee80e-fc34-11ea-94e0-7f4bcd3c57af + a9cf03e8-fc34-11ea-ba3e-d76ea14ba230 + a9cf1f54-fc34-11ea-a2cc-377334480ce8 + a9cf3d9a-fc34-11ea-98c4-3327cc6b39cc + a9cf5fc8-fc34-11ea-a4f1-5b510e449edc + a9cf7c4c-fc34-11ea-b108-47e87ef39b73 + a9cfa064-fc34-11ea-ad3b-d77ffa0e5639 + a9cfbb76-fc34-11ea-98b4-c390daac996f + a9cfdbe2-fc34-11ea-9d5f-974fcff8fbaa + a9cffce4-fc34-11ea-9f39-d37c439f3260 + a9d01ecc-fc34-11ea-864e-2f6e1cf394ee + a9d03fd8-fc34-11ea-bbe8-c7ed7f6300e7 + a9d0612a-fc34-11ea-a9de-2bce87e31e5d + a9d08ae2-fc34-11ea-9531-db0ca0125519 + a9d0adba-fc34-11ea-bc8e-6f3f25527678 + a9d0cda4-fc34-11ea-a70e-2b4ef624b076 + a9d0f59a-fc34-11ea-8350-0f0dba8764ad + a9d11732-fc34-11ea-a13b-0f17b666bbf6 + a9d14004-fc34-11ea-80e3-ef3b98e30121 + a9d160f2-fc34-11ea-bb08-eb0a4cabe5e1 + a9d182c6-fc34-11ea-bf36-8ff9a9442fc2 + a9d1a184-fc34-11ea-8bc7-bbffddc6d672 + a9d1bf7a-fc34-11ea-a92d-47018af4087c + a9d1dd2a-fc34-11ea-b0fc-074bb5587840 + a9d1fa26-fc34-11ea-931c-bf1ce7950a81 + a9d214de-fc34-11ea-99db-b7c147172101 + a9d236d0-fc34-11ea-9dd3-6b6c41f597e0 + a9d257fa-fc34-11ea-a49b-f78dcbd3c288 + a9d27794-fc34-11ea-8f6f-ef9649945941 + a9d29436-fc34-11ea-b627-4f7ef174eb1f + a9d2b236-fc34-11ea-927d-07455ab5753d + a9d2d2d4-fc34-11ea-92c9-c3f47c850462 + a9d2f552-fc34-11ea-837e-2b43cf41cea4 + a9d31b0e-fc34-11ea-ac0c-0388d62cfc85 + a9d33b2a-fc34-11ea-b340-3f2f06b2c7fe + a9d35f06-fc34-11ea-ba28-fb8ab0f2cfee + a9d38666-fc34-11ea-a37f-93d45b432ad1 + a9d3a81c-fc34-11ea-8f4e-dba9b02de6e3 + a9d3cad6-fc34-11ea-bd90-7bbddf13a707 + a9d3ede0-fc34-11ea-a736-1f331c3289f4 + a9d40fa0-fc34-11ea-8731-37aba7e34902 + a9d42fc6-fc34-11ea-b4a9-579e0581ef2e + a9d451fe-fc34-11ea-aa4e-470ed6185b25 + a9d46f86-fc34-11ea-8c32-8fe9cecd076c + a9d48cf0-fc34-11ea-970b-a7ce25885249 + a9d4ad70-fc34-11ea-8e8c-a36f1ad7b837 + a9d4cd82-fc34-11ea-8ee0-df8b4e4e43e8 + a9d4edee-fc34-11ea-b5e2-2773f0b787f5 + a9d50dc4-fc34-11ea-8f04-ebd8b1b79129 + a9d52c5a-fc34-11ea-af01-c748eca409d1 + a9d54dde-fc34-11ea-a5dc-2fd9e1b9a16e + a9d56d3c-fc34-11ea-8129-e3d681d7ff78 + a9d598fc-fc34-11ea-923f-175619a68894 + a9d5bda0-fc34-11ea-92b8-fb7f557775d1 + a9d5e1a4-fc34-11ea-a040-bfadf630839d + a9d60788-fc34-11ea-bbae-1be1099b9326 + a9d6270e-fc34-11ea-8075-c7b05b17d558 + a9d644fa-fc34-11ea-b35a-0f096be4a73a + a9d663f4-fc34-11ea-ba81-274e9ee57738 + a9d68686-fc34-11ea-aabd-af1e432ed7b8 + a9d6a7f6-fc34-11ea-adca-1b75d30c7b38 + a9d6c61e-fc34-11ea-92e5-5fba6f6af894 + a9d6e342-fc34-11ea-be04-2f7d7fa128bc + a9d701ce-fc34-11ea-a753-eb7c7cbb054e + a9d7215e-fc34-11ea-aa49-97947d112a62 + a9d741f2-fc34-11ea-b7ca-cf555a9f95e5 + a9d7675e-fc34-11ea-9132-23d1fdd2bf76 + a9d7857c-fc34-11ea-adb2-9386efdc7239 + a9d7a3d6-fc34-11ea-968b-27c4788c07cb + a9d7c41a-fc34-11ea-99b7-1329b0c6d1ea + a9d7e134-fc34-11ea-8e3a-f32288c1ada6 + a9d7fee4-fc34-11ea-bcb0-c382929ab965 + a9d821a8-fc34-11ea-9cd7-8bc879b30660 + a9d84840-fc34-11ea-8b63-9f6609e870a0 + a9d86e9c-fc34-11ea-8691-57203431a64c + a9d88d5a-fc34-11ea-b124-1322f342a467 + a9d8ab64-fc34-11ea-abbf-3bf13b666b16 + a9d8d102-fc34-11ea-aad8-231975c06d09 + a9d8f2e0-fc34-11ea-92da-a72e17cd4f9c + a9d9136a-fc34-11ea-9f17-cfff385ed6cf + a9d9325a-fc34-11ea-8208-ef26cb38ab7b + a9d95154-fc34-11ea-96b1-bf860bb2cae3 + a9d97184-fc34-11ea-ac22-27c2491f26f9 + a9d9909c-fc34-11ea-b693-bf2c321f2ed1 + a9d9afbe-fc34-11ea-9247-1ba1ad5abb9c + a9d9cfbc-fc34-11ea-8742-6762bc587d4a + a9d9f082-fc34-11ea-85c4-7fe65fb49399 + a9da0ee6-fc34-11ea-936b-7fed9201288f + a9da3290-fc34-11ea-9338-a709e8a54906 + a9da52e8-fc34-11ea-92f6-1bff69ca5769 + a9da77b4-fc34-11ea-ae2b-bb4efe286b25 + a9da99b0-fc34-11ea-a256-ef5a14629a59 + a9daba8a-fc34-11ea-8533-3f8ec0079c5e + a9dadab0-fc34-11ea-aca2-c76ee38b60b6 + a9daf98c-fc34-11ea-8a37-b741efd9aa2d + a9db1a84-fc34-11ea-b04f-2329a77f7651 + a9db3cbc-fc34-11ea-8ce2-e389f52fea30 + a9db6430-fc34-11ea-8c33-2bed94b04b63 + a9db8c76-fc34-11ea-8308-7360bc4c6575 + a9dbb1ec-fc34-11ea-a5c1-271dc9c0ed32 + a9dbd1ae-fc34-11ea-91a9-038b75c5bc3f + a9dbf72e-fc34-11ea-9e07-737ba04bd0f3 + a9dc18c6-fc34-11ea-a456-fb17add8a09c + a9dc3a7c-fc34-11ea-8ece-bb511d02393a + a9dc5b4c-fc34-11ea-882c-7f1633e17a09 + a9dc7c94-fc34-11ea-ab30-f37a73883188 + a9dca034-fc34-11ea-867b-db8d3bf51a68 + a9dcc096-fc34-11ea-97f4-735b25ebe3f9 + a9dce68e-fc34-11ea-ad42-e33039ebacba + a9dd0740-fc34-11ea-a80e-53da66cc6211 + a9dd26c6-fc34-11ea-b5c7-bfcf4787e7c9 + a9dd45a2-fc34-11ea-8d49-93ec28560e72 + a9dd6820-fc34-11ea-924a-83fefaa16e8c + a9dd89c2-fc34-11ea-9746-63c111592262 + a9ddaa56-fc34-11ea-ba2e-1b29195f7774 + a9ddd06c-fc34-11ea-a8c9-fb252f9e437a + a9ddf3f8-fc34-11ea-8845-eb0e9ef43f4a + a9de16d0-fc34-11ea-8c5d-db6c55b79ac8 + a9de3cfa-fc34-11ea-99c0-2b3a39892457 + a9de5f8c-fc34-11ea-908d-eb7dbcec69b8 + a9de7fe4-fc34-11ea-9f4d-ff01e9671035 + a9dea212-fc34-11ea-b900-939b9c8296f0 + a9dec10c-fc34-11ea-b4b2-535c75a516f3 + a9dee056-fc34-11ea-a694-938c46a1e6c3 + a9defdca-fc34-11ea-b4fb-7b5d148969bb + a9df1b20-fc34-11ea-ac83-6f575cd47de7 + a9df4136-fc34-11ea-92c9-b3eb0edc5f5c + a9df627e-fc34-11ea-99ea-cf9d4b32ee3b + a9df824a-fc34-11ea-a3e2-8f9d95a48591 + a9dfa7b6-fc34-11ea-a18a-f7c50c9bec92 + a9dfcde0-fc34-11ea-8ef5-cf501dd993d9 + a9dff9d2-fc34-11ea-9c4b-539135cf591b + a9e01f2a-fc34-11ea-ba53-1348f4006018 + a9e04202-fc34-11ea-b4cf-d76773cc94d2 + a9e068a4-fc34-11ea-877a-9fac6a0728de + a9e08a6e-fc34-11ea-899f-9b9d0bd03dc0 + a9e0b156-fc34-11ea-9beb-4b9413577fa8 + a9e0d58c-fc34-11ea-b76b-1719b3a5c4df + a9e0f6e8-fc34-11ea-8602-67caba330fc2 + a9e11862-fc34-11ea-b180-33c3f5f39783 + a9e13928-fc34-11ea-87ed-1b2f65ad117b + a9e15b56-fc34-11ea-8cf1-93069f5d6cb0 + a9e18252-fc34-11ea-aa72-931ab4707b5e + a9e1b25e-fc34-11ea-aa07-8fa8d8731fc4 + a9e1d34c-fc34-11ea-90aa-43145deec41c + a9e1f19c-fc34-11ea-ad57-abca3b3a4442 + a9e21712-fc34-11ea-a0d3-a30eadd7e88d + a9e23f30-fc34-11ea-96ec-337b7cc57a0b + a9e26802-fc34-11ea-821e-83f367114d30 + a9e288fa-fc34-11ea-b517-bf62fdd69383 + a9e2ac86-fc34-11ea-a6bc-8badb7ac6197 + a9e2d404-fc34-11ea-ab98-7b088fc82d33 + a9e2f65a-fc34-11ea-9e6e-bff913d8d588 + a9e3159a-fc34-11ea-bbb4-3f4ce26e09dd + a9e33926-fc34-11ea-aaec-1b4eadb55482 + a9e358ac-fc34-11ea-92bb-6346bd78d95b + a9e37f9e-fc34-11ea-b3c5-3b696939a915 + a9e3a622-fc34-11ea-b463-5bf8b1b0638f + a9e3c6e8-fc34-11ea-a908-db5f229874cd + a9e3ed3a-fc34-11ea-95b4-d74e8a583c0e + a9e40fb8-fc34-11ea-a4dd-67c88288e9eb + a9e42fde-fc34-11ea-ad34-0385d3bcd4da + a9e44fa0-fc34-11ea-8562-5729637c8eef + a9e4707a-fc34-11ea-a7d4-17f2495aab4a + a9e49668-fc34-11ea-a8f6-b33ba862e166 + a9e4bcf6-fc34-11ea-9bd2-b740062336ae + a9e4e276-fc34-11ea-b303-83e0f2aee6fe + a9e5054e-fc34-11ea-83f0-572f907fbd46 + a9e52cc2-fc34-11ea-9cdc-ab5d9e83db36 + a9e5501c-fc34-11ea-b0c9-c7585e3b168d + a9e572c2-fc34-11ea-8b5f-afd4d373ae38 + a9e59a4a-fc34-11ea-b54f-ff713c19ec26 + a9e5bf0c-fc34-11ea-a46e-2bd754839742 + a9e5e234-fc34-11ea-832b-43a05a045d90 + a9e6021e-fc34-11ea-90c2-df3d9a822fc5 + a9e6228a-fc34-11ea-afc4-231e37ebb38a + a9e64b52-fc34-11ea-bfe3-2bf4a3b61a39 + a9e66b0a-fc34-11ea-b14f-c7a66b243d68 + a9e68a22-fc34-11ea-95c7-0b8879ae228f + a9e6a886-fc34-11ea-9e90-2b417c69ebbe + a9e6c712-fc34-11ea-b5ec-ab168c35410b + a9e6e5ee-fc34-11ea-9c0b-b37d52e9dd22 + a9e705e2-fc34-11ea-97a5-f79db51081af + a9e724aa-fc34-11ea-8fc1-d76522144069 + a9e748ae-fc34-11ea-a77e-af7afd2b616f + a9e766d6-fc34-11ea-9874-d30c04910dd6 + a9e78aa8-fc34-11ea-8a12-3337852e903a + a9e7aa06-fc34-11ea-93f7-e353c6cc0122 + a9e7cbe4-fc34-11ea-849a-b3a88be9b46c + a9e7f150-fc34-11ea-90ef-7f6c7bf65771 + a9e81176-fc34-11ea-97b4-c7162dff9a73 + a9e83020-fc34-11ea-b61e-6b8f661feccc + a9e851f4-fc34-11ea-a157-7bcc840b8040 + a9e874c2-fc34-11ea-afb9-333e2de46d4a + a9e8943e-fc34-11ea-9244-3b44e5857215 + a9e8b306-fc34-11ea-81e7-7fd1343e7e8f + a9e8d0c0-fc34-11ea-9cbb-db6298ab25e8 + a9e8f0b4-fc34-11ea-abfb-7f771dec9634 + a9e9101c-fc34-11ea-a150-238a6211b56f + a9e93182-fc34-11ea-8e9c-c3e04dde0dbf + a9e95234-fc34-11ea-b246-0bd91251ddb3 + a9e97408-fc34-11ea-8424-0bcc5365d3f5 + a9e993d4-fc34-11ea-8a53-dfad4c115d37 + a9e9b332-fc34-11ea-90f6-a70c86d504fd + a9e9d0ba-fc34-11ea-ad52-075ceba73468 + a9e9f112-fc34-11ea-8a36-7fbc998b7bf0 + a9ea14a8-fc34-11ea-abbb-2f3c5f63d731 + a9ea3b54-fc34-11ea-b7d9-777ae41b8e5b + a9ea5b8e-fc34-11ea-99ff-67f7bf5a62a9 + a9ea7f06-fc34-11ea-88eb-a764c20e4d60 + a9eaa4a4-fc34-11ea-a155-5ba4acdc481b + a9eac72c-fc34-11ea-b952-9bb7c984d3cd + a9eae824-fc34-11ea-8662-7b827881654d + a9eb08b8-fc34-11ea-a822-1f0ffb6d7d10 + a9eb2992-fc34-11ea-a995-83818aaa1439 + a9eb490e-fc34-11ea-8cb2-83816d724055 + a9eb674a-fc34-11ea-a61d-f7fbf5bcb9b4 + a9eb878e-fc34-11ea-9052-7b3cebd17d9c + a9eba53e-fc34-11ea-add3-0bec580fac63 + a9ebc5f0-fc34-11ea-8911-17cf69e14e4f + a9ebe63e-fc34-11ea-ab9b-cb38978b2949 + a9ec0808-fc34-11ea-8610-dfacdb9bf429 + a9ec281a-fc34-11ea-89cb-2bd8ecac95f5 + a9ec4692-fc34-11ea-9a43-e356c9599d2f + a9ec6546-fc34-11ea-aa67-9bec66812ef3 + a9ec8382-fc34-11ea-b74a-57ffd8680e17 + a9ecbff0-fc34-11ea-be35-0b1b2e06bc4e + a9ece0a2-fc34-11ea-8b92-cfb7241c69e1 + a9ed008c-fc34-11ea-b4a1-27da82278a99 + a9ed2210-fc34-11ea-94fb-93cbf841828b + a9ed431c-fc34-11ea-8265-83e3dd952f5e + a9ed625c-fc34-11ea-b57e-eb06fb93f4bd + a9ed7f4e-fc34-11ea-b479-5b814b8995cc + a9ed9dee-fc34-11ea-90d3-4fe5f9cf33ad + a9edbe28-fc34-11ea-a5fc-3f985958f9fc + a9eddda4-fc34-11ea-8fcc-277ad17add7f + a9edfb7c-fc34-11ea-a49c-93d4e74bba77 + a9ee1c88-fc34-11ea-b298-17f831ceb773 + a9ee3f7e-fc34-11ea-8be2-236e076bdf65 + a9ee5de2-fc34-11ea-a2d9-978ae380e6f5 + a9ee7f98-fc34-11ea-804b-0798bdbbb903 + a9eea2a2-fc34-11ea-96c0-376583cd9f5a + a9eec264-fc34-11ea-831c-0fb20de70fa6 + a9eee460-fc34-11ea-807f-6f42eda5c83a + a9ef0a80-fc34-11ea-997c-4b6ae4c26351 + a9ef2c4a-fc34-11ea-997c-afe586f04ddd + a9ef4c02-fc34-11ea-b9e2-0b8be4857b2a + a9ef7254-fc34-11ea-b38f-cba81d1458fb + a9ef95b8-fc34-11ea-98b4-d7f3446a0adf + a9efb980-fc34-11ea-bb3b-fba5c98da470 + a9efd8c0-fc34-11ea-85e7-3baa3be80280 + a9eff878-fc34-11ea-b90f-4f9f0b853698 + a9f0177c-fc34-11ea-b459-23962f60da34 + a9f03446-fc34-11ea-b3ed-fb133ea9fdb2 + a9f055a2-fc34-11ea-9064-af315a828f19 + a9f075fa-fc34-11ea-9b1b-4bac408ff7ad + a9f0967a-fc34-11ea-8c10-bba318fc1dbd + a9f0b4d4-fc34-11ea-b5d8-d7978ae7e185 + a9f0d4b4-fc34-11ea-a778-1fc5d7f9ac7b + a9f0f3ea-fc34-11ea-8e95-87fc8d21b6dd + a9f11302-fc34-11ea-8f6e-4b43b0d1b0ca + a9f13184-fc34-11ea-b702-2f3d0841aae3 + a9f14f66-fc34-11ea-9c0a-7b658a3ca1e1 + a9f17112-fc34-11ea-9eb8-43b71cd707b5 + a9f19214-fc34-11ea-9db1-2b62d495a3e0 + a9f1b37a-fc34-11ea-9171-ebaa7c14c361 + a9f1d558-fc34-11ea-ba97-670f9c7a39a3 + a9f1fb96-fc34-11ea-84f4-bfe6a2b495dc + a9f21f22-fc34-11ea-986e-8f79cf46ca85 + a9f24128-fc34-11ea-bd55-4b53aea99799 + a9f2636a-fc34-11ea-9fbc-1f022eeb2eef + a9f2843a-fc34-11ea-915b-ab268ff51a41 + a9f2a33e-fc34-11ea-8b6a-87fb8bc3d4af + a9f2c36e-fc34-11ea-a059-ff5bb26f6171 + a9f2e2e0-fc34-11ea-989c-3b27c8651d3b + a9f30356-fc34-11ea-8a9b-e747fa6a33a0 + a9f32d22-fc34-11ea-90df-6786806027ff + a9f34bae-fc34-11ea-9c62-679273dfcdf6 + a9f36ba2-fc34-11ea-8276-47f95f400bd8 + a9f38d8a-fc34-11ea-bf47-27eafdc73ed3 + a9f3ad42-fc34-11ea-862a-3f7192ffe321 + a9f3d254-fc34-11ea-bde9-f7a6ddee7434 + a9f3ff90-fc34-11ea-94cc-bb6d0c305750 + a9f426dc-fc34-11ea-9ae4-13526253d4d7 + a9f488d4-fc34-11ea-b01e-07a16d15d14d + a9f4c65a-fc34-11ea-9b67-ffa24ece3b0f + a9f4ec7a-fc34-11ea-8e30-330c57e602f7 + a9f50c82-fc34-11ea-9a0e-0324d1400efe + a9f52b90-fc34-11ea-9b22-77f33119e413 + a9f549fe-fc34-11ea-a0a7-47a7bd2143fc + a9f56b8c-fc34-11ea-8f5b-a379806168cc + a9f58c48-fc34-11ea-804c-f71a1fc902d9 + a9f5ae9e-fc34-11ea-b8a3-d32f34612110 + a9f5cf8c-fc34-11ea-8015-376068aea094 + a9f5ef58-fc34-11ea-a1e8-efd6bdb70245 + a9f60ea2-fc34-11ea-abbb-df1148da85bf + a9f62fea-fc34-11ea-a522-db28d69995f3 + a9f64f7a-fc34-11ea-8e1b-337e6908e5e0 + a9f67158-fc34-11ea-9af6-5b1f44ce20d4 + a9f6976e-fc34-11ea-a010-fbb04b9b425f + a9f6b7c6-fc34-11ea-991a-1f912a5b96d1 + a9f6d97c-fc34-11ea-aa55-cbf68e03f66e + a9f6fc18-fc34-11ea-a4ed-97924e1d70ad + a9f71dc4-fc34-11ea-847b-9b3c1cf9b3b6 + a9f7409c-fc34-11ea-b5cb-dfca19a6b85f + a9f76388-fc34-11ea-99e7-5f2cf78d18be + a9f78458-fc34-11ea-ae43-a75a780a31cc + a9f7a4e2-fc34-11ea-8523-5f687116a8dc + a9f7c45e-fc34-11ea-b95d-db9e396f191f + a9f7e3bc-fc34-11ea-ba40-0bfd4bcc99a9 + a9f80590-fc34-11ea-88aa-5fc0fa0022ef + a9f82688-fc34-11ea-bd79-b318a445aa96 + a9f844a6-fc34-11ea-bb17-2bd754647df1 + a9f86404-fc34-11ea-9d41-bf6d68f06620 + a9f883c6-fc34-11ea-941b-73a5792ad79f + a9f8a554-fc34-11ea-8a22-c3c5a71b2eba + a9f8c3d6-fc34-11ea-8a1b-5b5283974e60 + a9f8e2a8-fc34-11ea-a664-67432d63b58e + a9f90300-fc34-11ea-9ae6-1f4963cfa83b + a9f92286-fc34-11ea-a88e-73d5f3243676 + a9f94608-fc34-11ea-994a-4b060e30e111 + a9f967dc-fc34-11ea-81cc-63849926997b + a9f98870-fc34-11ea-a5ee-e7d37bfc3950 + a9f9aabc-fc34-11ea-90c1-13dcc05e55d2 + a9f9ca38-fc34-11ea-b66f-03569dc6a1a6 + a9f9ed88-fc34-11ea-ac33-1bb362f68026 + a9fa0f0c-fc34-11ea-a5b5-17a4ae6b731c + a9fa2d2a-fc34-11ea-b6d7-f7bfd4ff0061 + a9fa4bac-fc34-11ea-b5b8-efbd03074774 + a9fa6ccc-fc34-11ea-b9e3-e35821459af1 + a9fa8cfc-fc34-11ea-af2e-e7d25325ab82 + a9faad36-fc34-11ea-b27d-e3349bab319f + a9faccda-fc34-11ea-be72-0f4f163a61da + a9faec38-fc34-11ea-a7b5-53d6a0f7c834 + a9fb0c18-fc34-11ea-88d8-4fc2dee0b2ce + a9fb2b30-fc34-11ea-a594-5b4a1fcacf41 + a9fb4a02-fc34-11ea-8a1f-1bc893b85ecc + a9fb69ce-fc34-11ea-9768-a772fded442b + a9fb8918-fc34-11ea-bf15-8754896d9912 + a9fba7fe-fc34-11ea-8473-37b20794ad3d + a9fbc5fe-fc34-11ea-a809-97db6feec84c + a9fbe624-fc34-11ea-9f84-87c2487c3fb3 + a9fc04a6-fc34-11ea-8a9d-5b6196b94a07 + a9fc2be8-fc34-11ea-ad7e-174e806fb387 + a9fc501e-fc34-11ea-aefa-c7ce02c0b946 + a9fc70a8-fc34-11ea-b05d-b3d69cabb76f + a9fc924a-fc34-11ea-a421-bf9281d1706e + a9fcb1c6-fc34-11ea-9ce8-2345ae734b5e + a9fcd2f0-fc34-11ea-94b3-672578571798 + a9fcf3a2-fc34-11ea-a353-638515529755 + a9fd144a-fc34-11ea-80f0-73768aff7e32 + a9fd3452-fc34-11ea-af6a-9bf0f5f36281 + a9fd54b4-fc34-11ea-85d1-e7e846af26f3 + a9fd7368-fc34-11ea-97be-5b44ae67cce7 + a9fd9316-fc34-11ea-8f56-fbecc2da5d26 + a9fdb256-fc34-11ea-9c16-c7f4661c9e8c + a9fdd114-fc34-11ea-9919-cf92f585b9a6 + a9fdee74-fc34-11ea-8db7-2f52cb64519c + a9fe132c-fc34-11ea-8e65-4b40d93747ed + a9fe3596-fc34-11ea-a955-03e22546fc76 + a9fe58c8-fc34-11ea-8c46-3f44ab466b8f + a9fe7844-fc34-11ea-a7d2-2b2d95f2856b + a9fe9ae0-fc34-11ea-84a0-afd7fe624a27 + a9febd18-fc34-11ea-872a-a7116597456c + a9fee36a-fc34-11ea-a444-6f3f3953514c + a9ff03a4-fc34-11ea-98a0-df9199ba15e0 + a9ff2226-fc34-11ea-9184-d753cbda47e2 + a9ff4350-fc34-11ea-80e1-c3bf4e477433 + a9ff633a-fc34-11ea-bf5e-03749d6a2922 + a9ff8284-fc34-11ea-85a6-936c01e59def + a9ffa2dc-fc34-11ea-ac6b-9ba9a044f91a + a9ffc280-fc34-11ea-8ac1-33e0960d003c + a9ffe26a-fc34-11ea-a71a-9bdebd110ca1 + aa000218-fc34-11ea-9cac-77ce6a3c5919 + aa001f82-fc34-11ea-a6ff-47464c213eb3 + aa0041a6-fc34-11ea-9b67-9f29454b6995 + aa00632a-fc34-11ea-b767-df92e892ebc5 + aa008210-fc34-11ea-89ea-2be023ae0bf3 + aa00a556-fc34-11ea-bab3-b78ccd6921cf + aa00c630-fc34-11ea-9a81-cbea6fb6837e + aa00e87c-fc34-11ea-b93c-378747265eea + aa0108a2-fc34-11ea-a903-87c2e9e5eae5 + aa012c42-fc34-11ea-b585-674ff65a9ed4 + aa014bbe-fc34-11ea-92dd-a7e253505860 + aa016e00-fc34-11ea-97de-9bfd8a9985e9 + aa018e1c-fc34-11ea-a173-ab1003d31ec7 + aa01ad8e-fc34-11ea-b02d-5b2b4d9cd77e + aa01cdd2-fc34-11ea-b6e5-ff4ee63bac4b + aa01ee5c-fc34-11ea-90a4-2ba2c3dfb989 + aa020e6e-fc34-11ea-adc7-3b81b2ef638e + aa022ca0-fc34-11ea-933c-637cb5266cb8 + aa024b72-fc34-11ea-93c2-17b05185ed0b + aa0269f4-fc34-11ea-ab4a-7f4680501f4e + aa028858-fc34-11ea-9890-0b890d163906 + aa02a73e-fc34-11ea-9c1e-5ba84657d561 + aa02c62e-fc34-11ea-becc-d785bcd1414a + aa02e456-fc34-11ea-b129-df568b861b0b + aa03036e-fc34-11ea-8138-43eb3d93e542 + aa0322a4-fc34-11ea-b587-2f02fcf2512d + aa0341b2-fc34-11ea-ae97-c354e99d1f68 + aa0362be-fc34-11ea-bd26-9783b820b758 + aa038334-fc34-11ea-9a39-b7648678d817 + aa03a558-fc34-11ea-a6b6-fb6c9b9e5c82 + aa03c498-fc34-11ea-86d1-9be4ccb2bcbf + aa03e504-fc34-11ea-a47b-6f79ad52a5e5 + aa0405e8-fc34-11ea-9068-a712d71631be + aa042ae6-fc34-11ea-accb-438e4529a5aa + aa044b2a-fc34-11ea-be30-eb0e186df636 + aa046d80-fc34-11ea-8fcf-6743c31d6803 + aa049058-fc34-11ea-8f12-478fb3f78a28 + aa04af16-fc34-11ea-9d77-fbd9dcba8bec + aa04cd8e-fc34-11ea-af6f-f7afa3ee1e39 + aa04ea62-fc34-11ea-a5a4-f715bd7bcc0e + aa0507c2-fc34-11ea-a936-9fe4108d57a8 + aa0526a8-fc34-11ea-a5b9-53cec429312f + aa05475a-fc34-11ea-9c62-b7f859b8ae70 + aa056636-fc34-11ea-aa93-fbb45ae3b406 + aa058800-fc34-11ea-9500-53d3755a8150 + aa05a61e-fc34-11ea-bba0-3faff662f0f9 + aa05c68a-fc34-11ea-8572-9f7150a2613f + aa05e746-fc34-11ea-b216-afd5210023dd + aa06092e-fc34-11ea-94d9-777b778a9323 + aa062dfa-fc34-11ea-a09c-73879e0381e6 + aa065122-fc34-11ea-bcdb-73f10b744b8e + aa067328-fc34-11ea-910d-37f435af5a0a + aa06992a-fc34-11ea-a584-43929d3327e7 + aa06b98c-fc34-11ea-80db-1b165dbbd768 + aa06da02-fc34-11ea-8c48-67f6e2f01b5c + aa06f9a6-fc34-11ea-9cb5-bb63e037550c + aa0718c8-fc34-11ea-8741-bf5fb2f05f6d + aa0739fc-fc34-11ea-9edc-27242baab72e + aa0758ba-fc34-11ea-be12-afcee92756a0 + aa077692-fc34-11ea-b69e-0f44df7751e1 + aa07978a-fc34-11ea-959c-afe42adbbcae + aa07b742-fc34-11ea-9214-3ffb51fc6042 + aa07d858-fc34-11ea-9d8a-47525b22e84c + aa07f7e8-fc34-11ea-a13a-f79e44e1aa64 + aa0817be-fc34-11ea-b183-0b17cea7fb49 + aa083820-fc34-11ea-85ad-9bd67d84ddc8 + aa0857c4-fc34-11ea-9547-8b8f655a53b2 + aa0877a4-fc34-11ea-bbb9-5b801260d2a1 + aa089dd8-fc34-11ea-8b6c-67b96e400197 + aa08bef8-fc34-11ea-b278-5b7686726973 + aa08de60-fc34-11ea-9eb9-5f72c4162c97 + aa08ffa8-fc34-11ea-9d34-5f8e8c1bbc10 + aa092528-fc34-11ea-acf5-5758c83e9c45 + aa094670-fc34-11ea-aee5-1fe99b20de7d + aa09668c-fc34-11ea-8529-8bd017ea9fca + aa098892-fc34-11ea-8028-3bf56b7cdce7 + aa09a7b4-fc34-11ea-a097-53383fd1cc4a + aa09c58c-fc34-11ea-ac2c-9f563ccc6da7 + aa09e81e-fc34-11ea-9620-1b13e5f447ab + aa0a095c-fc34-11ea-be25-7b0e24f4ffb1 + aa0a28b0-fc34-11ea-bf3b-2fdae54097d7 + aa0a47a0-fc34-11ea-9c57-f33e4490a079 + aa0a667c-fc34-11ea-bf5b-ab6fd087af5f + aa0a836e-fc34-11ea-a409-4b13044a3a05 + aa0aa2ae-fc34-11ea-841c-d3205f066bfe + aa0ac04a-fc34-11ea-9977-c39a641053bd + aa0ae0ca-fc34-11ea-a6e2-7b982087b86b + aa0b023a-fc34-11ea-8d32-67a0a8f32ff0 + aa0b28d2-fc34-11ea-bc60-4f96246dfa27 + aa0b4d80-fc34-11ea-9d80-a78838f54c0f + aa0b7350-fc34-11ea-bc48-1f452a789121 + aa0b96a0-fc34-11ea-bfc7-c76a1ebfa717 + aa0bb5f4-fc34-11ea-bebd-db71d7a3d952 + aa0bd728-fc34-11ea-a46b-37f20a0f2a43 + aa0bf5aa-fc34-11ea-9aff-435f071bd1f5 + aa0c15e4-fc34-11ea-8b1e-334b362b5db3 + aa0c354c-fc34-11ea-a960-afba0ee07cd7 + aa0c54c8-fc34-11ea-842d-db29cf25d678 + aa0c75b6-fc34-11ea-89eb-c76895d4424f + aa0c9442-fc34-11ea-bf26-b7806e118d6c + aa0cb21a-fc34-11ea-8a62-6b442e53bd50 + aa0cd1b4-fc34-11ea-94dd-0b16ba749884 + aa0cf14e-fc34-11ea-b624-cf3a546a67c2 + aa0d13ae-fc34-11ea-a9ea-e785dfbc6ab4 + aa0d32bc-fc34-11ea-bfa0-3bed35873463 + aa0d5198-fc34-11ea-a7d7-fbf833566ad0 + aa0d7420-fc34-11ea-8fe4-e788e44d65fc + aa0d9824-fc34-11ea-9f40-d71711db9aa8 + aa0dbd2c-fc34-11ea-92d5-1f11953f6ce9 + aa0ddd0c-fc34-11ea-a326-b36f2540671e + aa0dfc2e-fc34-11ea-ba80-a3f22330cdaf + aa0e1f4c-fc34-11ea-9207-bf50f81f4a37 + aa0e3e96-fc34-11ea-84d6-9bb008c1fa07 + aa0e5fd4-fc34-11ea-b8cc-670436a5b918 + aa0e811c-fc34-11ea-90a8-231b7b5e6618 + aa0ea0fc-fc34-11ea-abea-377296f0254b + aa0ec104-fc34-11ea-a020-03fbc6cd586b + aa0edfc2-fc34-11ea-a885-abd79e02fd93 + aa0f0100-fc34-11ea-b75b-dfba62915e1f + aa0f2126-fc34-11ea-a004-87408cc41898 + aa0f421e-fc34-11ea-9fdf-bff927815f19 + aa0f63ac-fc34-11ea-a62b-4b857c565154 + aa0f84ae-fc34-11ea-8973-5b71cc214cbf + aa0fa506-fc34-11ea-a8c3-5f7a437f91db + aa0fc392-fc34-11ea-acbd-6bc20cef86fd + aa0fe14c-fc34-11ea-91a0-5b546635bae3 + aa1005be-fc34-11ea-8d86-b3e9ca37d96a + aa102bfc-fc34-11ea-a423-ebe0d5e85691 + aa104eac-fc34-11ea-8ec3-8b5929a9ecb4 + aa107148-fc34-11ea-8e73-6f849f535436 + aa1093c6-fc34-11ea-bc7e-0b0919d0d7b2 + aa10b4be-fc34-11ea-9f1d-7700f895047b + aa10d5b6-fc34-11ea-a7d8-875b5991b77a + aa10f44c-fc34-11ea-9bd3-8b8c8644b490 + aa11138c-fc34-11ea-ab21-d7aa1d94c59a + aa11356a-fc34-11ea-8a86-4f34b92c7cc6 + aa1154e6-fc34-11ea-a6f8-fb5c52c931d8 + aa117476-fc34-11ea-8518-6faa805bd6ca + aa119424-fc34-11ea-9210-5bcc5b189376 + aa11b486-fc34-11ea-9b64-53ccdb852cfa + aa11d380-fc34-11ea-9a9b-a3bd507b938d + aa11f482-fc34-11ea-9e1c-ab28371351c3 + aa12137c-fc34-11ea-ba09-b363c711cee7 + aa123230-fc34-11ea-8198-bf4c2e44fb94 + aa125288-fc34-11ea-9768-53d6a9d014c7 + aa127164-fc34-11ea-bf2e-abd58f4f531b + aa129130-fc34-11ea-bcbc-27d28e6888e0 + aa12af94-fc34-11ea-9ba6-3fa44eae98d8 + aa12d532-fc34-11ea-b587-fb62d28c986e + aa12f8be-fc34-11ea-aed2-e7ded77987b4 + aa1318bc-fc34-11ea-8fa7-57669da3e589 + aa1337e8-fc34-11ea-9e69-abeee3c33ab0 + aa1357fa-fc34-11ea-b83d-9738578f658b + aa137794-fc34-11ea-84e5-bfdc477d994e + aa1396a2-fc34-11ea-8c10-f38b4f7cbd09 + aa13b7c2-fc34-11ea-a2a3-338588c7a080 + aa13d720-fc34-11ea-95d5-abf99465e7cf + aa13f6ba-fc34-11ea-a400-bf0c42a9d182 + aa141744-fc34-11ea-b904-7b69197401a9 + aa1434ea-fc34-11ea-ac72-675b04942245 + aa1453da-fc34-11ea-897f-f752f8b62900 + aa147360-fc34-11ea-8319-d34a7fb57d9a + aa1493a4-fc34-11ea-a8bb-8396e2319181 + aa14b4ba-fc34-11ea-96ae-abd257845714 + aa14d224-fc34-11ea-8baf-9767e0c37b6c + aa14f434-fc34-11ea-9ace-9f1a1149c818 + aa151270-fc34-11ea-9d2c-37c67ff68a6e + aa15332c-fc34-11ea-a588-1f0817e612c8 + aa15585c-fc34-11ea-8898-ffa80c9bf58e + aa157c4c-fc34-11ea-9da4-e319e1076ffb + aa159d76-fc34-11ea-bd61-5b3df840af09 + aa15bdd8-fc34-11ea-8b6d-cb8930baa525 + aa15de08-fc34-11ea-99c6-07c15e84791a + aa15fe92-fc34-11ea-83a5-7385222d8cf9 + aa161fda-fc34-11ea-bf7e-67b479f54522 + aa163e0c-fc34-11ea-8f15-83a1a2ef8268 + aa165bd0-fc34-11ea-9008-cbf1cb69674b + aa167bce-fc34-11ea-aada-df5a8964ee16 + aa169dde-fc34-11ea-9099-933618741291 + aa16bc06-fc34-11ea-a9db-43c83c4936e8 + aa16dc72-fc34-11ea-b69d-079a03849e7d + aa16fb30-fc34-11ea-834b-1b0b8c2a546a + aa171a84-fc34-11ea-a87d-976eb1db4f69 + aa173ac8-fc34-11ea-8f04-9b03f3d4c1d0 + aa175d96-fc34-11ea-a2da-7f89f4be2783 + aa177e70-fc34-11ea-9e80-cf1b8c024b3b + aa17a062-fc34-11ea-ae86-9b6eb4e99acc + aa17bf84-fc34-11ea-a327-87d9ca0d135f + aa17dfbe-fc34-11ea-9a11-638550eed9bb + aa1804da-fc34-11ea-ae33-73b650d717d8 + aa1827b2-fc34-11ea-b28d-dfaa7eac6039 + aa184e5e-fc34-11ea-a952-67c52d6bc1ab + aa18705a-fc34-11ea-af94-2725f819a626 + aa188fb8-fc34-11ea-ab61-4be23e61567d + aa18ae6c-fc34-11ea-abd5-ebb5a5629456 + aa18cffa-fc34-11ea-be1c-536276265de6 + aa18ee86-fc34-11ea-979f-bfdb57010f09 + aa190f06-fc34-11ea-9a27-f7214846391c + aa192e5a-fc34-11ea-8dc5-936eb9683456 + aa194e30-fc34-11ea-bbd9-7362d8390ff3 + aa196db6-fc34-11ea-9faa-8334f727fe0d + aa198f4e-fc34-11ea-9934-9360b1abd687 + aa19b078-fc34-11ea-919a-d7a539a9d16b + aa19cd42-fc34-11ea-bd9b-ef3989205af4 + aa19ed4a-fc34-11ea-a6a6-c39b295c1e29 + aa1a0d52-fc34-11ea-8744-c7bbf9304454 + aa1a2e9a-fc34-11ea-92d8-4bec6ca59da4 + aa1a4e66-fc34-11ea-aebb-9363c4ffa6e1 + aa1a6fc2-fc34-11ea-bf81-4ffc24edf088 + aa1a90e2-fc34-11ea-b52e-a7e6fbca71e4 + aa1ab144-fc34-11ea-b6ee-db152a5a0eaa + aa1ad02a-fc34-11ea-90a7-f788b4f51c4e + aa1af30c-fc34-11ea-84bd-5f1a057881e8 + aa1b1a44-fc34-11ea-b2cf-33c6c3a76a48 + aa1b39b6-fc34-11ea-a7e0-1790ca5f9a3f + aa1b59e6-fc34-11ea-a0d1-070d3546e492 + aa1b79a8-fc34-11ea-b8b4-0fd8ffaba6f9 + aa1b9802-fc34-11ea-9195-c3a42a1e6da0 + aa1bb90e-fc34-11ea-8521-2fae34762da0 + aa1bd862-fc34-11ea-92c4-777e21aeeef6 + aa1bf91e-fc34-11ea-b4cd-0b2f4686d389 + aa1c18d6-fc34-11ea-8fc7-1f34971cac93 + aa1c3776-fc34-11ea-8d23-53e7b1aba7c0 + aa1c5882-fc34-11ea-aa17-c76a8a363616 + aa1c77f4-fc34-11ea-b08a-c704cbaeeab8 + aa1c9892-fc34-11ea-a8b6-23b85b99a3ba + aa1cb9ee-fc34-11ea-8a65-238ed69d0fd3 + aa1cdbfe-fc34-11ea-9c4a-b7e38bbaade9 + aa1cfe90-fc34-11ea-bce8-435db63d1728 + aa1d1f56-fc34-11ea-ac36-83d3e927a4e2 + aa1d40b2-fc34-11ea-8f41-db549798d096 + aa1d6628-fc34-11ea-a3c2-43c160c62e89 + aa1d8a18-fc34-11ea-9035-7b579188f729 + aa1daab6-fc34-11ea-be6a-db2e78a4bfe1 + aa1dc992-fc34-11ea-a3f0-33bae64022b2 + aa1de706-fc34-11ea-9e24-8b096d61bbdb + aa1e0786-fc34-11ea-9a4d-4ffc9eb13059 + aa1e29a0-fc34-11ea-8124-43a4b3e671ed + aa1e48e0-fc34-11ea-aba1-2bf64cbaf4ac + aa1e6a96-fc34-11ea-8dfa-9f6326675861 + aa1e8aa8-fc34-11ea-b155-8b29a9f52075 + aa1eaaf6-fc34-11ea-8804-b7ca4e12d10d + aa1ecaea-fc34-11ea-8932-8b98fab7c9cb + aa1eeb10-fc34-11ea-80de-67e4f5bcb53c + aa1f0c80-fc34-11ea-8ad9-47ec2e5f89b7 + aa1f2a8a-fc34-11ea-a851-3fff933bcebb + aa1f4ca4-fc34-11ea-8311-5f80be79243d + aa1f6c34-fc34-11ea-bd9d-37d67f15f5fe + aa1f8c64-fc34-11ea-afb2-e7eff020311f + aa1fae4c-fc34-11ea-9aed-ef0eb0ddcf19 + aa1fd502-fc34-11ea-a795-b3b3805fdf77 + aa1ff960-fc34-11ea-a7a1-2306a22c08ba + aa201b98-fc34-11ea-8c00-d7c757697b70 + aa203ae2-fc34-11ea-ad45-1fed6d9f76c7 + aa205b80-fc34-11ea-8ee8-3394fa73a179 + aa207d7c-fc34-11ea-af95-131830921b42 + aa209ec4-fc34-11ea-8ce2-63775ccef3f9 + aa20be2c-fc34-11ea-9b7b-ebc2827cc635 + aa20df06-fc34-11ea-8cc7-cfa113ea6e25 + aa2100d0-fc34-11ea-a8ab-e3cb1a3b644e + aa211ed0-fc34-11ea-82c5-3b949dab1df0 + aa213dde-fc34-11ea-a68b-333d9a92997d + aa215dc8-fc34-11ea-9e28-f7c0d15ff523 + aa217ccc-fc34-11ea-9647-ff65f0be9cea + aa219c70-fc34-11ea-a068-03492af5b4c2 + aa21bdfe-fc34-11ea-a860-4317535590c2 + aa21dd8e-fc34-11ea-aa2f-775aa60d9830 + aa21fe18-fc34-11ea-baf4-c7a9f952fa67 + aa221ede-fc34-11ea-9d8f-67909dcd9c62 + aa223eaa-fc34-11ea-84ed-33bbf9c575f5 + ab82a21c-fc34-11ea-a00b-db1a18e277e6 + ac00c3ae-fc34-11ea-8627-e3f64444c02d + ac00e67c-fc34-11ea-95da-177db4b24217 + ac01080a-fc34-11ea-a318-1b0e3a9959e8 + + diff --git a/pom.xml b/pom.xml index ee70ff5d..6cbd5cb4 100644 --- a/pom.xml +++ b/pom.xml @@ -73,6 +73,7 @@ bubble.test.promo.AccountCreditTest bubble.test.promo.MultiplePromotionsTest bubble.test.system.DriverTest + bubble.test.filter.CharsetDetectionTest bubble.test.filter.ProxyTest bubble.test.filter.TrafficAnalyticsTest bubble.test.filter.BlockSummaryTest @@ -80,6 +81,7 @@ bubble.test.system.BackupTest bubble.test.system.NetworkTest bubble.abp.spec.BlockListTest + org.cobbzilla.util.io.regex.RegexFilterReaderTest diff --git a/utils/cobbzilla-parent b/utils/cobbzilla-parent index bcb92061..2324f5d1 160000 --- a/utils/cobbzilla-parent +++ b/utils/cobbzilla-parent @@ -1 +1 @@ -Subproject commit bcb92061c3482ba4803c0030c78fb550206a0511 +Subproject commit 2324f5d196fa52931f07e85c830bf9c10465b8f8 diff --git a/utils/cobbzilla-utils b/utils/cobbzilla-utils index 1cfe96e5..a9d3d69f 160000 --- a/utils/cobbzilla-utils +++ b/utils/cobbzilla-utils @@ -1 +1 @@ -Subproject commit 1cfe96e59ca2c98955a379e539183a5596dab33f +Subproject commit a9d3d69f1112a47b8d69f9343cc66caf5bab1383 diff --git a/utils/cobbzilla-wizard b/utils/cobbzilla-wizard index cd9cf18c..e91152f2 160000 --- a/utils/cobbzilla-wizard +++ b/utils/cobbzilla-wizard @@ -1 +1 @@ -Subproject commit cd9cf18c90a373f024163c048d57cf574ec97293 +Subproject commit e91152f296a04ce1e4363ae90e1cfde70cdee4d5 From cee262e44e2a67d4eaeaab5f5769ad1903c23d52 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Mon, 21 Sep 2020 15:59:00 -0400 Subject: [PATCH 19/20] bump version --- .../src/main/resources/META-INF/bubble/bubble.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bubble-server/src/main/resources/META-INF/bubble/bubble.properties b/bubble-server/src/main/resources/META-INF/bubble/bubble.properties index b4c6555a..0c90f0a1 100644 --- a/bubble-server/src/main/resources/META-INF/bubble/bubble.properties +++ b/bubble-server/src/main/resources/META-INF/bubble/bubble.properties @@ -1 +1 @@ -bubble.version=Adventure 1.2.3 +bubble.version=Adventure 1.2.4 From 30007220f5ecd6679b8cdac19d80c17ec2a91e69 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Mon, 21 Sep 2020 16:43:08 -0400 Subject: [PATCH 20/20] use TeeInputStream to avoid consuming response stream --- .../service/stream/StandardRuleEngineService.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/bubble-server/src/main/java/bubble/service/stream/StandardRuleEngineService.java b/bubble-server/src/main/java/bubble/service/stream/StandardRuleEngineService.java index dc502074..7edf218e 100644 --- a/bubble-server/src/main/java/bubble/service/stream/StandardRuleEngineService.java +++ b/bubble-server/src/main/java/bubble/service/stream/StandardRuleEngineService.java @@ -24,6 +24,7 @@ import lombok.Cleanup; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; +import org.apache.commons.io.input.TeeInputStream; import org.apache.http.Header; import org.apache.http.StatusLine; import org.apache.http.client.methods.CloseableHttpResponse; @@ -40,6 +41,7 @@ import org.cobbzilla.util.collection.SingletonList; import org.cobbzilla.util.http.HttpClosingFilterInputStream; import org.cobbzilla.util.http.HttpMethods; import org.cobbzilla.util.http.URIBean; +import org.cobbzilla.util.io.multi.MultiStream; import org.cobbzilla.wizard.cache.redis.RedisService; import org.cobbzilla.wizard.stream.ByteStreamingOutput; import org.cobbzilla.wizard.stream.SendableResource; @@ -50,6 +52,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.ws.rs.core.Response; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; @@ -125,6 +128,8 @@ public class StandardRuleEngineService implements RuleEngineService { return send(response); } + // this method is only called by the ReverseProxyResource which is not used in production, + // so we can be a little less strict about performance and other things public Response applyRulesAndSendResponse(ContainerRequest request, URIBean ub, FilterHttpRequest filterRequest) throws IOException { @@ -153,9 +158,14 @@ public class StandardRuleEngineService implements RuleEngineService { filterRequest.setContentLength(contentLength); final CharsetDetector charsetDetector = CharsetDetector.charSetDetectorForContentType(filterRequest.getContentType()); - final BubbleCharSet cs = charsetDetector.getCharSet(in, contentLength != null ? contentLength : 1024, true); + final long size = contentLength != null ? contentLength : 1024; + final ByteArrayOutputStream stash = new ByteArrayOutputStream((int) size); + final TeeInputStream teeIn = new TeeInputStream(in, stash); + final BubbleCharSet cs = charsetDetector.getCharSet(teeIn, size, true); final Charset charset = cs == null ? null : cs.getCharset(); - final InputStream responseEntity = firstRule.getDriver().filterResponse(filterRequest, in, charset); + final MultiStream multiStream = new MultiStream(new ByteArrayInputStream(stash.toByteArray())); + multiStream.addLastStream(in); + final InputStream responseEntity = firstRule.getDriver().filterResponse(filterRequest, multiStream, charset); // send response return sendResponse(responseEntity, proxyResponse);