Ten zeszyt opisuje dwie miary oparte o położenia formantów F1/F2 samogłosek, mające odzwierciedlenie w praktycznych zastosowaniach opisanych w literaturze: Vowel Space Area (VSA), oraz Vowel Articulation Index (VAI). Ich opis i zastosowanie można przeczytać na przykład w pracy:

The absolute Hz2 values of vowel area obtained through this calculation do not possess functional significance on their own, although they are estimated to serve as an index of the general pattern of change in the working space for vowels [16,17,18]. However, measurement of the triangular or quadrilateral VSA, although well established as the most common acoustic metric in research on disturbed vowel articulation (e.g. [13,19]), has been proven to be insensitive to mild or moderate forms of dysarthria, especially in PD patients [4]. Moreover, in some studies, the VSA accounted for only about 10% of the variance in measures of speech intelligibility [20,21]. Recently, a further surrogate parameter called ‘‘vowel articulation index/VAI’’ (and its reciprocal value, the so called ‘‘formant centralization ratio/FCR’’) had been developed by Sapir and coworkers [15,18] and been proven by empirical testing to be more sensitive in Parkinsonian hypokinetic dysarthria than tVSA in several publications [15,18,22].

W powyższym akapicie zacytowano między innymi dwie następujące prace, które również warto przeczytać:

Zanim przejdziemy do liczenia tych miar, wczytajmy naszą bazę i formanty. Zgodnie z pracą o chorobie Parkinsona będziemy się koncentrować na samogłoskach a, i i u:

library(emuR)
library(dplyr)
library(phonR)
db <- load_emuDB('clarin', verbose = FALSE)
segs <- query(db,'Phoneme=a|i|u')
td <- get_trackdata(db,seglist = segs, ssffTrackName = 'Formants', cut=0.5,
                 verbose = FALSE)

Tak jak poprzednio wszystko co potrzebne przekopiujemy do osobnej tabelki i usuniemy z niej błędne wartości:

dt <- data.frame(speaker=segs$session,phoneme=segs$labels,F1=td$fm1,F2=td$fm2)
dt <- filter(dt, F1 > 0 & F2 > 0)
dt

Żeby policzyć VSA, musimy policzyć pole wielokąta, którego wierzchołkami są centroidy poszczególnych samogłosek. W tym przypadku analizujemy pole trójkąta (bo mamy 3 samogłoski), ale w literaturze spotykamy różne metody liczenia pola. Dlatego tę metodę nazwano w pracy powyżej tVSA (czyli triangular vowel space area).

W pracy wspomniano, że metoda ta jest dosyć popularna i używana w wielu pracach, więc nic dziwnego, że ktoś już ją zaimplementował. W bibilotece phonR można znaleźć metodę vowelMeansPolygonArea, która wszystko wylicza:

VSA<-vowelMeansPolygonArea(dt$F1,dt$F2,dt$phoneme,poly.order=c('i','a','u'),group = dt$speaker)

Podajemy do niej po kolei F1 i F2 z bazy, listę samogłosek, kolejność samogłosek do liczenia powierzchni (ma to duże znaczenie, jeśli ich ilość jest >3) oraz listę mówców.

Implementacja tej funkcji jest dosyć prosta:

vowelMeansPolygonArea
function (f1, f2, vowel, poly.order, group = NULL) 
{
    if (length(poly.order) != length(unique(poly.order))) {
        message("[phonR]: Duplicate entries in 'poly.order' detected; they ", 
            "will be ignored.")
    }
    poly.order <- unique(as.character(poly.order))
    v <- unique(as.character(vowel))
    if (length(setdiff(poly.order, v)) > 0) {
        message("[phonR]: There are vowels in 'poly.order' that are not in ", 
            "'vowel'; they will be ignored.")
        poly.order <- intersect(poly.order, v)
    }
    if (is.null(group)) 
        group <- "all.points"
    df <- data.frame(f2 = f2, f1 = f1, v = factor(vowel, levels = poly.order), 
        g = group)
    df <- df[order(df$v), ]
    bygrouparea <- c(by(df, df$g, function(i) splancs::areapl(cbind(tapply(i$f2, 
        i$v, mean), tapply(i$f1, i$v, mean)))))
}
<environment: namespace:phonR>

Dane są najpierw sortowane według mówcy (funkcja by(df,df$g,...)). Potem są liczone średnie F1 i F2 dla poszczególnych samogłosek (funkcje tapply(i$f1, i$v, mean) i to samo dla f2). Na koniec wszystko jest przekazywane do funkcji areapl z biblioteki splancs. Funkcja ta liczy powierzchnię dowolnego wielokąta używając standardowej metody, o której można poczytać na Wikipedii: https://en.wikipedia.org/wiki/Shoelace_formula

Mankamentem tej funkcji jest to, że żadne odcinki tego wielokąta nie mogą się krzyżować. Dlatego bardzo istotna jest kolejność wierzchołków (samogłosek) w przypadku jeśli ich ilość jest >=4.

Po wyliczeniu możemy narysować wartości VSA dla poszczególnych sesji:

barplot(VSA,ylab = expression(Hz^2))

Podczas nagrywania korpusu, czasami ta sama osoba była nagrywana podwójnie. W tym przypadku, sesje 103 i 104 oraz 105 i 106 to te same osoby. Niemniej widać różnice w otrzymanych wartościach.

Żeby policzyć VAI, nie mamy niestety istniejącej implementacji w R, więc zrobimy to ręcznie. Miara ta jest stosunkiem dwóch skrajnych wartości położenia formantów (F1 samogłoski a i F2 samogłoski i) względem wszystkich innych.

Musimy zatem sami ręcznie najpierw wyliczyć średnie F1 i F2 dla poszczególnych mówców i ich samogłosek:

da <- dt %>% group_by(speaker,phoneme) %>% summarise_at(vars(F1,F2), funs(mean(.)))

A potem w funkcji wyciągniemy poszczególne wartości i zastosujemy je we wzorze:

VAI_func <- function(spk) {
  f1a<-filter(spk,phoneme=='a')$F1
  f2a<-filter(spk,phoneme=='a')$F2
  f1i<-filter(spk,phoneme=='i')$F1
  f2i<-filter(spk,phoneme=='i')$F2
  f1u<-filter(spk,phoneme=='u')$F1
  f2u<-filter(spk,phoneme=='u')$F2
  
  VAI<-(f1a+f2i)/(f2a+f1i+f1u+f2u)
}
VAI=by(da,da$speaker,VAI_func)

Tak jak ostatnio możemy narysować wykres:

barplot(VAI)

Warto zauważyć, że chociaż ogólnie wartości wychodzą podobnie, to niektóre wartości, zbliżone w przestzeni VSA, wyszły zupełnie inne dla VAI. W szczególności, mówca sesji 103/104 ma lepsze VAI od mówcy 105/106, inaczej niż w przypadku VSA.

Żeby było jasne, w tym przypadku nie można wyciągnąć żadnych wniosków z tego eksperymentu! Na pewno nie można mówić o chorobie Parkinsona i żadnych innych dolegliwościach na podstawie tego kontekstu. Można jednak pomyśleć o innych, bardziej przyziemnych zastosowaniach. Gdybyśmy przykładowo szukali wśród tych osób kogoś do pracy w radiu albo telewizji, prawdopodobnie byśmy preferowali tych o wyższych wartościach VAI/VSA. Jednak nawet w tym przypadku wartości tych nie można by stosować bez odniesienia do innych aspektów osobniczych kandydatów.

LS0tCnRpdGxlOiAiVlNBIGkgVkFJIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpUZW4gemVzenl0IG9waXN1amUgZHdpZSBtaWFyeSBvcGFydGUgbyBwb8WCb8W8ZW5pYSBmb3JtYW50w7N3IEYxL0YyIHNhbW9nxYJvc2VrLCBtYWrEhWNlIG9kendpZXJjaWVkbGVuaWUgdyBwcmFrdHljem55Y2ggemFzdG9zb3dhbmlhY2ggb3Bpc2FueWNoIHcgbGl0ZXJhdHVyemU6ICoqVm93ZWwgU3BhY2UgQXJlYSoqIChWU0EpLCBvcmF6ICoqVm93ZWwgQXJ0aWN1bGF0aW9uIEluZGV4KiogKFZBSSkuIEljaCBvcGlzIGkgemFzdG9zb3dhbmllIG1vxbxuYSBwcnplY3p5dGHEhyBuYSBwcnp5a8WCYWQgdyBwcmFjeToKCiAgKiBTa29kZGEsIFMuLCBHcsO2bmhlaXQsIFcuLCAmIFNjaGxlZ2VsLCBVLiAoMjAxMikuIEltcGFpcm1lbnQgb2YgVm93ZWwgQXJ0aWN1bGF0aW9uIGFzIGEgUG9zc2libGUgTWFya2VyIG9mIERpc2Vhc2UgUHJvZ3Jlc3Npb24gaW4gUGFya2luc29u4oCZcyBEaXNlYXNlLiBQTG9TIE9ORSwgNygyKSwgZTMyMTMyLiBodHRwczovL2RvaS5vcmcvMTAuMTM3MS9qb3VybmFsLnBvbmUuMDAzMjEzMgoKPiBUaGUgYWJzb2x1dGUgSHoyIHZhbHVlcyBvZiB2b3dlbCBhcmVhIG9idGFpbmVkIHRocm91Z2ggdGhpcyBjYWxjdWxhdGlvbiBkbyBub3QgcG9zc2VzcyBmdW5jdGlvbmFsIHNpZ25pZmljYW5jZSBvbiB0aGVpciBvd24sIGFsdGhvdWdoIHRoZXkgYXJlIGVzdGltYXRlZCB0byBzZXJ2ZSBhcyBhbiBpbmRleCBvZiB0aGUgZ2VuZXJhbCBwYXR0ZXJuIG9mIGNoYW5nZSBpbiB0aGUgd29ya2luZyBzcGFjZSBmb3Igdm93ZWxzIFsxNiwxNywxOF0uIEhvd2V2ZXIsIG1lYXN1cmVtZW50IG9mIHRoZSB0cmlhbmd1bGFyIG9yIHF1YWRyaWxhdGVyYWwgVlNBLCBhbHRob3VnaCB3ZWxsIGVzdGFibGlzaGVkIGFzIHRoZSBtb3N0IGNvbW1vbiBhY291c3RpYyBtZXRyaWMgaW4gcmVzZWFyY2ggb24gZGlzdHVyYmVkIHZvd2VsIGFydGljdWxhdGlvbiAoZS5nLiBbMTMsMTldKSwgaGFzIGJlZW4gcHJvdmVuIHRvIGJlIGluc2Vuc2l0aXZlIHRvIG1pbGQgb3IgbW9kZXJhdGUgZm9ybXMgb2YgZHlzYXJ0aHJpYSwgZXNwZWNpYWxseSBpbiBQRCBwYXRpZW50cyBbNF0uIE1vcmVvdmVyLCBpbiBzb21lIHN0dWRpZXMsIHRoZSBWU0EgYWNjb3VudGVkIGZvciBvbmx5IGFib3V0IDEwJSBvZiB0aGUgdmFyaWFuY2UgaW4gbWVhc3VyZXMgb2Ygc3BlZWNoIGludGVsbGlnaWJpbGl0eSBbMjAsMjFdLiBSZWNlbnRseSwgYSBmdXJ0aGVyIHN1cnJvZ2F0ZSBwYXJhbWV0ZXIgY2FsbGVkIOKAmOKAmHZvd2VsIGFydGljdWxhdGlvbiBpbmRleC9WQUnigJnigJkgKGFuZCBpdHMgcmVjaXByb2NhbCB2YWx1ZSwgdGhlIHNvIGNhbGxlZCDigJjigJhmb3JtYW50IGNlbnRyYWxpemF0aW9uIHJhdGlvL0ZDUuKAmeKAmSkgaGFkIGJlZW4gZGV2ZWxvcGVkIGJ5IFNhcGlyIGFuZCBjb3dvcmtlcnMgWzE1LDE4XSBhbmQgYmVlbiBwcm92ZW4gYnkgZW1waXJpY2FsIHRlc3RpbmcgdG8gYmUgbW9yZSBzZW5zaXRpdmUgaW4gUGFya2luc29uaWFuIGh5cG9raW5ldGljIGR5c2FydGhyaWEgdGhhbiB0VlNBIGluIHNldmVyYWwgcHVibGljYXRpb25zIFsxNSwxOCwyMl0uCgpXIHBvd3nFvHN6eW0gYWthcGljaWUgemFjeXRvd2FubyBtacSZZHp5IGlubnltaSBkd2llIG5hc3TEmXB1asSFY2UgcHJhY2UsIGt0w7NyZSByw7N3bmllxbwgd2FydG8gcHJ6ZWN6eXRhxIc6CgogICogU2FwaXIsIFMuLCBSYW1pZywgTC4gTy4sIFNwaWVsbWFuLCBKLiBMLiwgJiBGb3gsIEMuICgyMDEwKS4gRm9ybWFudCBjZW50cmFsaXphdGlvbiByYXRpbzogYSBwcm9wb3NhbCBmb3IgYSBuZXcgYWNvdXN0aWMgbWVhc3VyZSBvZiBkeXNhcnRocmljIHNwZWVjaC4gSm91cm5hbCBvZiBTcGVlY2gsIExhbmd1YWdlLCBhbmQgSGVhcmluZyBSZXNlYXJjaCA6IEpTTEhSLCA1MygxKSwgMTE04oCTMTI1LiBodHRwczovL2RvaS5vcmcvMTAuMTA0NC8xMDkyLTQzODgoMjAwOS8wOC0wMTg0KQogICogUm95LCBOLiwgTmlzc2VuLCBTLiBMLiwgRHJvbWV5LCBDLiwgJiBTYXBpciwgUy4gKG4uZC4pLiBBcnRpY3VsYXRvcnkgY2hhbmdlcyBpbiBtdXNjbGUgdGVuc2lvbiBkeXNwaG9uaWE6IEV2aWRlbmNlIG9mIHZvd2VsIHNwYWNlIGV4cGFuc2lvbiBmb2xsb3dpbmcgbWFudWFsIGNpcmN1bWxhcnluZ2VhbCB0aGVyYXB5LiBodHRwczovL2RvaS5vcmcvMTAuMTAxNi9qLmpjb21kaXMuMjAwOC4xMC4wMDEKClphbmltIHByemVqZHppZW15IGRvIGxpY3plbmlhIHR5Y2ggbWlhciwgd2N6eXRham15IG5hc3rEhSBiYXrEmSBpIGZvcm1hbnR5LiBaZ29kbmllIHogcHJhY8SFIG8gY2hvcm9iaWUgUGFya2luc29uYSBixJlkemllbXkgc2nEmSBrb25jZW50cm93YcSHIG5hIHNhbW9nxYJvc2thY2ggKmEqLCAqaSogaSAqdSo6CmBgYHtyfQpsaWJyYXJ5KGVtdVIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkocGhvblIpCgpkYiA8LSBsb2FkX2VtdURCKCdjbGFyaW4nLCB2ZXJib3NlID0gRkFMU0UpCnNlZ3MgPC0gcXVlcnkoZGIsJ1Bob25lbWU9YXxpfHUnKQp0ZCA8LSBnZXRfdHJhY2tkYXRhKGRiLHNlZ2xpc3QgPSBzZWdzLCBzc2ZmVHJhY2tOYW1lID0gJ0Zvcm1hbnRzJywgY3V0PTAuNSwKICAgICAgICAgICAgICAgICB2ZXJib3NlID0gRkFMU0UpCmBgYAoKVGFrIGphayBwb3ByemVkbmlvIHdzenlzdGtvIGNvIHBvdHJ6ZWJuZSBwcnpla29waXVqZW15IGRvIG9zb2JuZWogdGFiZWxraSBpIHVzdW5pZW15IHogbmllaiBixYLEmWRuZSB3YXJ0b8WbY2k6CmBgYHtyfQpkdCA8LSBkYXRhLmZyYW1lKHNwZWFrZXI9c2VncyRzZXNzaW9uLHBob25lbWU9c2VncyRsYWJlbHMsRjE9dGQkZm0xLEYyPXRkJGZtMikKZHQgPC0gZmlsdGVyKGR0LCBGMSA+IDAgJiBGMiA+IDApCmR0CmBgYAoKxbtlYnkgcG9saWN6ecSHICoqVlNBKiosIG11c2lteSBwb2xpY3p5xIcgcG9sZSB3aWVsb2vEhXRhLCBrdMOzcmVnbyB3aWVyemNob8WCa2FtaSBzxIUgY2VudHJvaWR5IHBvc3pjemVnw7NsbnljaCBzYW1vZ8WCb3Nlay4gVyB0eW0gcHJ6eXBhZGt1IGFuYWxpenVqZW15IHBvbGUgdHLDs2prxIV0YSAoYm8gbWFteSAzIHNhbW9nxYJvc2tpKSwgYWxlIHcgbGl0ZXJhdHVyemUgc3BvdHlrYW15IHLDs8W8bmUgbWV0b2R5IGxpY3plbmlhIHBvbGEuIERsYXRlZ28gdMSZIG1ldG9kxJkgbmF6d2FubyB3IHByYWN5IHBvd3nFvGVqICp0VlNBKiAoY3p5bGkgdHJpYW5ndWxhciB2b3dlbCBzcGFjZSBhcmVhKS4KClcgcHJhY3kgd3Nwb21uaWFubywgxbxlIG1ldG9kYSB0YSBqZXN0IGRvc3nEhyBwb3B1bGFybmEgaSB1xbx5d2FuYSB3IHdpZWx1IHByYWNhY2gsIHdpxJljIG5pYyBkeml3bmVnbywgxbxlIGt0b8WbIGp1xbwgasSFIHphaW1wbGVtZW50b3dhxYIuIFcgYmliaWxvdGVjZSAqcGhvblIqIG1vxbxuYSB6bmFsZcW6xIcgbWV0b2TEmSAqKnZvd2VsTWVhbnNQb2x5Z29uQXJlYSoqLCBrdMOzcmEgd3N6eXN0a28gd3lsaWN6YToKYGBge3J9ClZTQTwtdm93ZWxNZWFuc1BvbHlnb25BcmVhKGR0JEYxLGR0JEYyLGR0JHBob25lbWUscG9seS5vcmRlcj1jKCdpJywnYScsJ3UnKSxncm91cCA9IGR0JHNwZWFrZXIpCmBgYAoKUG9kYWplbXkgZG8gbmllaiBwbyBrb2xlaSBGMSBpIEYyIHogYmF6eSwgbGlzdMSZIHNhbW9nxYJvc2VrLCBrb2xlam5vxZvEhyBzYW1vZ8WCb3NlayBkbyBsaWN6ZW5pYSBwb3dpZXJ6Y2huaSAobWEgdG8gZHXFvGUgem5hY3plbmllLCBqZcWbbGkgaWNoIGlsb8WbxIcgamVzdCA+Mykgb3JheiBsaXN0xJkgbcOzd2PDs3cuIAoKSW1wbGVtZW50YWNqYSB0ZWogZnVua2NqaSBqZXN0IGRvc3nEhyBwcm9zdGE6CmBgYHtyfQp2b3dlbE1lYW5zUG9seWdvbkFyZWEKYGBgCgpEYW5lIHPEhSBuYWpwaWVydyBzb3J0b3dhbmUgd2VkxYJ1ZyBtw7N3Y3kgKGZ1bmtjamEgYGJ5KGRmLGRmJGcsLi4uKWApLiBQb3RlbSBzxIUgbGljem9uZSDFm3JlZG5pZSBGMSBpIEYyIGRsYSBwb3N6Y3plZ8OzbG55Y2ggc2Ftb2fFgm9zZWsgKGZ1bmtjamUgYHRhcHBseShpJGYxLCBpJHYsIG1lYW4pYCBpIHRvIHNhbW8gZGxhIGYyKS4gTmEga29uaWVjIHdzenlzdGtvIGplc3QgcHJ6ZWthenl3YW5lIGRvIGZ1bmtjamkgYGFyZWFwbGAgeiBiaWJsaW90ZWtpICoqc3BsYW5jcyoqLiBGdW5rY2phIHRhIGxpY3p5IHBvd2llcnpjaG5pxJkgZG93b2xuZWdvIHdpZWxva8SFdGEgdcW8eXdhasSFYyBzdGFuZGFyZG93ZWogbWV0b2R5LCBvIGt0w7NyZWogbW/FvG5hIHBvY3p5dGHEhyBuYSBXaWtpcGVkaWk6Cmh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Nob2VsYWNlX2Zvcm11bGEKCk1hbmthbWVudGVtIHRlaiBmdW5rY2ppIGplc3QgdG8sIMW8ZSDFvGFkbmUgb2RjaW5raSB0ZWdvIHdpZWxva8SFdGEgbmllIG1vZ8SFIHNpxJkga3J6ecW8b3dhxIcuIERsYXRlZ28gYmFyZHpvIGlzdG90bmEgamVzdCBrb2xlam5vxZvEhyB3aWVyemNob8WCa8OzdyAoc2Ftb2fFgm9zZWspIHcgcHJ6eXBhZGt1IGplxZtsaSBpY2ggaWxvxZvEhyBqZXN0ID49NC4KClBvIHd5bGljemVuaXUgbW/FvGVteSBuYXJ5c293YcSHIHdhcnRvxZtjaSBWU0EgZGxhIHBvc3pjemVnw7NsbnljaCBzZXNqaToKYGBge3IsZmlnLndpZHRoPTEyfQpiYXJwbG90KFZTQSx5bGFiID0gZXhwcmVzc2lvbihIel4yKSkKYGBgCgpQb2RjemFzIG5hZ3J5d2FuaWEga29ycHVzdSwgY3phc2FtaSB0YSBzYW1hIG9zb2JhIGJ5xYJhIG5hZ3J5d2FuYSBwb2R3w7NqbmllLiBXIHR5bSBwcnp5cGFka3UsIHNlc2plIDEwMyBpIDEwNCBvcmF6IDEwNSBpIDEwNiB0byB0ZSBzYW1lIG9zb2J5LiBOaWVtbmllaiB3aWRhxIcgcsOzxbxuaWNlIHcgb3RyenltYW55Y2ggd2FydG/Fm2NpYWNoLgoKxbtlYnkgcG9saWN6ecSHICoqVkFJKiosIG5pZSBtYW15IG5pZXN0ZXR5IGlzdG5pZWrEhWNlaiBpbXBsZW1lbnRhY2ppIHcgUiwgd2nEmWMgenJvYmlteSB0byByxJljem5pZS4gTWlhcmEgdGEgamVzdCBzdG9zdW5raWVtIGR3w7NjaCBza3Jham55Y2ggd2FydG/Fm2NpIHBvxYJvxbxlbmlhIGZvcm1hbnTDs3cgKEYxIHNhbW9nxYJvc2tpICphKiBpIEYyIHNhbW9nxYJvc2tpICppKikgd3pnbMSZZGVtIHdzenlzdGtpY2ggaW5ueWNoLiAKCk11c2lteSB6YXRlbSBzYW1pIHLEmWN6bmllIG5hanBpZXJ3IHd5bGljennEhyDFm3JlZG5pZSBGMSBpIEYyIGRsYSBwb3N6Y3plZ8OzbG55Y2ggbcOzd2PDs3cgaSBpY2ggc2Ftb2fFgm9zZWs6CmBgYHtyfQpkYSA8LSBkdCAlPiUgZ3JvdXBfYnkoc3BlYWtlcixwaG9uZW1lKSAlPiUgc3VtbWFyaXNlX2F0KHZhcnMoRjEsRjIpLCBmdW5zKG1lYW4oLikpKQpgYGAKCkEgcG90ZW0gdyBmdW5rY2ppIHd5Y2nEhWduaWVteSBwb3N6Y3plZ8OzbG5lIHdhcnRvxZtjaSBpIHphc3Rvc3VqZW15IGplIHdlIHd6b3J6ZToKYGBge3J9ClZBSV9mdW5jIDwtIGZ1bmN0aW9uKHNwaykgewogIGYxYTwtZmlsdGVyKHNwayxwaG9uZW1lPT0nYScpJEYxCiAgZjJhPC1maWx0ZXIoc3BrLHBob25lbWU9PSdhJykkRjIKICBmMWk8LWZpbHRlcihzcGsscGhvbmVtZT09J2knKSRGMQogIGYyaTwtZmlsdGVyKHNwayxwaG9uZW1lPT0naScpJEYyCiAgZjF1PC1maWx0ZXIoc3BrLHBob25lbWU9PSd1JykkRjEKICBmMnU8LWZpbHRlcihzcGsscGhvbmVtZT09J3UnKSRGMgogIAogIFZBSTwtKGYxYStmMmkpLyhmMmErZjFpK2YxdStmMnUpCn0KVkFJPWJ5KGRhLGRhJHNwZWFrZXIsVkFJX2Z1bmMpCmBgYAoKVGFrIGphayBvc3RhdG5pbyBtb8W8ZW15IG5hcnlzb3dhxIcgd3lrcmVzOgpgYGB7cixmaWcud2lkdGg9MTJ9CmJhcnBsb3QoVkFJKQpgYGAKCldhcnRvIHphdXdhxbx5xIcsIMW8ZSBjaG9jaWHFvCBvZ8OzbG5pZSB3YXJ0b8WbY2kgd3ljaG9kesSFIHBvZG9ibmllLCB0byBuaWVrdMOzcmUgd2FydG/Fm2NpLCB6YmxpxbxvbmUgdyBwcnplc3R6ZW5pIFZTQSwgd3lzesWCeSB6dXBlxYJuaWUgaW5uZSBkbGEgVkFJLiBXIHN6Y3plZ8OzbG5vxZtjaSwgbcOzd2NhIHNlc2ppIDEwMy8xMDQgbWEgbGVwc3plIFZBSSBvZCBtw7N3Y3kgMTA1LzEwNiwgaW5hY3plaiBuacW8IHcgcHJ6eXBhZGt1IFZTQS4KCsW7ZWJ5IGJ5xYJvIGphc25lLCB3IHR5bSBwcnp5cGFka3UgbmllIG1vxbxuYSB3eWNpxIVnbsSFxIcgxbxhZG55Y2ggd25pb3Nrw7N3IHogdGVnbyBla3NwZXJ5bWVudHUhIE5hIHBld25vIG5pZSBtb8W8bmEgbcOzd2nEhyBvIGNob3JvYmllIFBhcmtpbnNvbmEgaSDFvGFkbnljaCBpbm55Y2ggZG9sZWdsaXdvxZtjaWFjaCBuYSBwb2RzdGF3aWUgdGVnbyBrb250ZWtzdHUuIE1vxbxuYSBqZWRuYWsgcG9tecWbbGXEhyBvIGlubnljaCwgYmFyZHppZWogcHJ6eXppZW1ueWNoIHphc3Rvc293YW5pYWNoLiBHZHliecWbbXkgcHJ6eWvFgmFkb3dvIHN6dWthbGkgd8WbcsOzZCB0eWNoIG9zw7NiIGtvZ2/FmyBkbyBwcmFjeSB3IHJhZGl1IGFsYm8gdGVsZXdpemppLCBwcmF3ZG9wb2RvYm5pZSBiecWbbXkgcHJlZmVyb3dhbGkgdHljaCBvIHd5xbxzenljaCB3YXJ0b8WbY2lhY2ggVkFJL1ZTQS4gSmVkbmFrIG5hd2V0IHcgdHltIHByenlwYWRrdSB3YXJ0b8WbY2kgdHljaCBuaWUgbW/FvG5hIGJ5IHN0b3Nvd2HEhyBiZXogb2RuaWVzaWVuaWEgZG8gaW5ueWNoIGFzcGVrdMOzdyBvc29ibmljenljaCBrYW5keWRhdMOzdy4=